成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL數據庫中不同數據類型字段關聯后結果居然有這么大差異?

數據庫 MySQL
在數據庫的世界里,數據的連接操作是至關重要的。但在處理關聯表的字段的數據類型不同時,得到的結果經常會出乎預料。

一、案例

1、數據庫中先創建表及數據

-- 創建tb1
CREATE TABLE tb1 (
  id BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR (20)
);
INSERT INTO tb1 (id, NAME)
VALUES
  (1459066134882947196, 'na1'), (1459066134882947172, 'cccb'), (1459066134882947163, 'tttttttn'), (1459066134882947198, 'acqada');
 
--  創建tb2
CREATE TABLE tb2 (
  id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, pid VARCHAR (20), c1 VARCHAR (10)
);
INSERT INTO tb2 (pid, c1)
VALUES
  ('1459066134882947196', 'cs'), (1459066134882947197, 'tt');

tb1 的id表為bigint,tb2表pid字段類型為varchar。

2、進行左連接查詢

SELECT  a.id,b.pid 
FROM  tb1 a  LEFT JOIN tb2 b 
ON a.id=b.`pid`
WHERE a.id =1459066134882947196

查詢結果如下

圖片

結果為非預期,因為2個表的關聯字段的內容并不相同。

3、使用內連接

SELECT  a.id,b.pid 
FROM  tb1 a   JOIN tb2 b 
ON a.id=b.`pid`
WHERE a.id =1459066134882947196

使用內連接后,結果也不正確。

圖片

4、不加where條件的左連接

SELECT  a.id,b.pid 
FROM  tb1 a   LEFT JOIN tb2 b 
ON a.id=b.`pid`

查詢結果如下:

圖片

關聯后確實是非預期的結果。

5、不加where條件的內連接

SELECT  a.id,b.pid 
FROM  tb1 a    JOIN tb2 b 
ON a.id=b.`pid`

查詢結果為:

此時不加where條件的內連接的結果卻是正確的、

二、解決方案

解決此問題的方法主要是解決兩個關聯字段的類型不同的問題,可以有2種方式

1、顯式類型轉換

在關聯的時候顯式地進行字段類型轉換,例如:

SELECT  a.id,b.pid FROM  tb1 a LEFT JOIN tb2 b 
ON CAST(a.`id`  AS  CHAR)=b.`pid`
WHERE a.id=1459066134882947196

結果如下

此時結果正確。
內連接結果也正確。

SELECT  a.id,b.pid 
FROM  tb1 a    JOIN tb2 b 
ON CAST(a.`id`  AS  CHAR)=b.`pid`
WHERE a.id =1459066134882947196

2、改變字段類型(推薦)

如果兩張表的數據量較大,使用顯式的字段類型轉換(包括當前隱式字段類型轉換)都將導致關聯時不能使用索引,影響性能。因此建議在表設計時就將存在關聯關系的字段類型設置為類型相同(字符類型時字符集及排序規則也一致)例如:

ALTER TABLE  tb2 MODIFY pid BIGINT;

修改后再查詢看一下結果:

SELECT  a.id,b.pid 
FROM  tb1 a   LEFT JOIN tb2 b 
ON a.`id`=b.`pid`
WHERE a.id =1459066134882947196

結果正確:

圖片

三、小結

此情況的出現是因為兩表的關聯字段類型不同時進行字段類型轉換導致。bigint與varchar轉換過程中字段精度出現問題,實際超過int最大值的數據(2147483647,即2^31 - 1)的數據被截斷為2^31 - 1處理,因為兩表進行左關聯時,存在異常。

從上面的過程中,也發現左連接過程與內連接的過程中的中間數據結果(1.4及1.5中)也不同。

責任編輯:姜華 來源: 數據庫干貨鋪
相關推薦

2010-06-04 09:16:40

MySQL 命令

2024-03-18 09:24:12

RocketMQ消息模型分布式

2010-06-02 11:24:57

MySQL數據庫主鍵

2022-07-03 06:10:15

MySQL數據庫

2010-05-26 17:05:48

MySQL數據類型

2013-01-24 09:44:44

數據庫

2021-08-03 22:26:46

Go函數分頁

2017-05-25 10:23:13

數據a表b表

2023-05-25 10:03:40

2010-09-01 15:23:59

DB2字段類型

2011-03-16 15:07:10

DB2數據庫數據類型

2011-03-30 14:08:27

MySQL數據庫刪除恢復

2012-03-16 15:20:43

MySQL

2010-08-26 09:44:42

db2數據類型

2011-08-25 16:31:36

SQL Servertimestamp

2017-07-10 13:38:07

MySQL數據類型整數類型

2010-06-30 11:31:55

SQL Server數

2025-04-08 06:00:00

2011-08-04 15:55:25

SQL Server數

2010-10-08 14:45:43

mysql中int
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一区不卡 | 91毛片在线看 | 久久久精品视 | 国产免费又色又爽又黄在线观看 | 四虎影音 | 激情a| 国产精品区一区二区三区 | 亚洲v区 | 亚洲最大av | 国产精品成人久久久久 | 超碰97免费在线 | 欧美日韩在线成人 | 亚洲精品一区二三区不卡 | 日韩av成人 | 精品九九| 久久av一区二区三区 | 午夜免费在线电影 | 国产成人jvid在线播放 | 亚洲 中文 欧美 日韩 在线观看 | 亚洲国产精品久久久 | 可以免费观看的av | 日韩久久精品 | 久久久久久久久久久久久91 | 国产精品资源在线观看 | 久久aⅴ乱码一区二区三区 91综合网 | 国产精品久久久久久久免费大片 | 久久性av | 国产精品久久久久久久久久免费看 | 成人h视频在线 | 性色av网站 | 福利视频日韩 | 99re6在线| 欧美亚洲视频在线观看 | 请别相信他免费喜剧电影在线观看 | 久久久久亚洲 | 91精品国产麻豆 | 国产91在线观看 | 精品美女久久久 | 日韩欧美一区二区三区 | 国产精品九九视频 | 国产精品 亚洲一区 |