6

私はここに数ヶ月潜んでいて、他の質問を読むことから多くを学びました、しかしこれは私が質問するのに十分勇敢であるのは初めてです!

SELECT  * FROM tableA a
JOIN tableB b ON b.tableBid = a.tableBid
WHERE a.tableAcol = 'paramValue';

テーブルBには39行しかありませんが、これらすべてについて、tableAに一致するtableBidを持つparamValueの行があるため、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';

次に、すべての場合にa.tableBidがb.tableBidと一致し、nullがない場合に期待する39行を取得します。

私は明らかに混乱しています。誰かがこれを説明できますか?

実際のデータを投稿することはできませんが、再現することはできます

 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
4

1 に答える 1

2

クエリ出力からの論理的な仮定:これが発生した場合、それはバグです。

Xeround エンジンを使用していることが明らかになった後、収集したテスト ケースを作成し、バグ リストまたはフォーラムにバグとして提出する必要があると思います。

于 2013-02-08T22:49:14.940 に答える