Dee*_*say 6 mysql database join instance
我一直潜伏在这里几个月,从阅读其他问题中学到很多东西,但这是我第一次勇敢地问一个问题!
SELECT  * FROM tableA a
JOIN tableB b ON b.tableBid = a.tableBid
WHERE a.tableAcol = 'paramValue';
表B中只有39行,对于每个人来说,tableA中有一行用于paramValue和一个匹配的tableBid,所以我希望得到39行.确实在我做的另一个数据库实例中.
我在实例中看不到任何显着差异,尽管这可能是无知的,但在这个新实例中,我只能获得具有相同查询的7条记录.
如果我将查询更改为
SELECT  * FROM tableA a
LEFT JOIN tableB b ON b.tableBid = a.tableBid
WHERE a.tableAcol = 'paramValue';
要么
SELECT  * FROM tableA a
LEFT JOIN tableB b ON a.tableBid = b.tableBid
WHERE a.tableAcol = 'paramValue';
然后我得到了我期望的39行,a.tableBid在所有情况下匹配b.tableBid并且没有空值
我很困惑.任何人都可以解释这个.
无法发布真实数据,但我可以重现它
 CREATE TABLE tableB (  
tableBid varchar(30) NOT NULL   PRIMARY KEY,
nameB varchar(25) NOT NULL  ,
description varchar(40) NOT NULL);
CREATE TABLE tableA (
userID varchar(30) NOT NULL,
tableBid Varchar(30) NOT NULL,
info varchar(10) NOT NULL,
PRIMARY KEY(userID, tableBID));
insert into tableB (tableBid, nameB, description)
values 
('a', 'a name', 'blah'),
('b', 'b name', 'blah'),
('c', 'c name', 'blah'),
('d', 'd name', 'blah');
insert into tableA (userID, tableBid, info)
values
('deel','a',  'blah'),
('deel','b',  'blah'),
('deel','c',  'blah'),
('deel','d',  'blah');
然后
SELECT  * FROM tableA a
LEFT JOIN tableB b ON b.tableBid = a.tableBid
WHERE a.userID = 'deel';
给了我4行:
deel    a   blah    a   a name  blah
deel    b   blah    b   b name  blah
deel    c   blah    c   c name  blah
deel    d   blah    d   d name  blah
但
SELECT  * FROM tableA a
JOIN tableB b ON b.tableBid = a.tableBid
WHERE a.userID = 'deel';
给我
deel    d   blah    d   d name  blah
表定义
CREATE TABLE `tablea` (
   `userID` varchar(30) NOT NULL,
   `tableBid` varchar(30) NOT NULL,
   `info` varchar(10) NOT NULL,
   PRIMARY KEY (`userID`,`tableBid`)
 ) ENGINE=Xeround DEFAULT CHARSET=latin1
CREATE TABLE `tableb` (
   `tableBid` varchar(30) NOT NULL,
   `nameB` varchar(25) NOT NULL,
   `description` varchar(40) NOT NULL,
   PRIMARY KEY (`tableBid`)
 ) ENGINE=Xeround DEFAULT CHARSET=latin1
| 归档时间: | 
 | 
| 查看次数: | 330 次 | 
| 最近记录: |