2011-12-17 6 views
0

以下のスクリプトを実行しました。 UserDetails.User#にはAccountDetails.User#というマッチしたレコードはありません。しかし、その結果は、スクリプト内で指定された各AccountDetails.account#と共に、UserDetailsのEvery user#を3回表示します。 SQL結合ステートメントに一致するものがない場合、何も返されませんか?データ型とサンプル値のSQL結合文が予期しないレコードを返しました

少し背景:

UserDetails.user# 
datatype = varchar(520) 
values in (1,0) 

AccountDetails.user# 
datatype = varchar(11) 
values in (22054414,28581057,26178648) 

私が走ったスクリプト:

SELECT a.account# , a.userNum , u.userNum, u.Name 
FROM AccountDetails a 
JOIN UserDetails u ON a.userNum = u.userNum 
WHERE a.account# IN (87173000,11900008,79000082) 

サンプル結果:

account#, a.userNum, u.userNum , u.Name 
87173000,  22054414,  1,  Joe Blow 
87173000,  28581057,  1,  John Smith 
11900008,  22054414,  1,  Joe Blow 
11900008,  28581057,  1,  John Smith 
79000082,  22054414,  1,  Joe Blow 
79000082,  28581057,  1,  John Smith 
+0

私は通常、代わりに内部結合を使用読みやすいように結合するだけです。しかし、私はそれがここでどのように役立つかは分かりません。 (エンジンがCROSSジョインとして見ている場合を除いて)それは試しにインナーを追加するのですか? – xQbert

答えて

0
 
SELECT a.account , a.user , u.Name 
FROM AccountDetails a 
JOIN UserDetails u ON (a.user = u.user) 
WHERE a.account IN (87173000,11900008,79000082) 
GROUP BY a.user 
+0

私はこれがうまくいっているとは思わない...集計ではなく、グループに含まれていない項目が選択リストにある。 –

+0

MySQLでは、GROUP BYリストでいくつかの奇妙なことが許されています。標準のSQLと他の大部分のDBMSではそうではありません。 –

関連する問題