1

私はこの本当に簡単なクエリを持っています。クエリが null レコードを返さない理由がわかりません。

SELECT table1.name, table2.name 
FROM table 
LEFT OUTER JOIN table2 
ON table1.id = table2.id 
WHERE table1.someid='2' 
AND table2.someid=2 
ORDER BY table1.order

また、LEFT JOIN、JOIN、INNER JOIN、FULL OUTER JOIN を使用してみましたが、エラーが発生します。

この単純なクエリは、必要なすべての値を返します。

SELECT table1.name 
FROM table 
WHERE table1.someid='2' 
ORDER BY table1.order
4

3 に答える 3

1

「2」を検索しようとしているテーブルを特定する必要があります。2つの句を使用すると、基本的にこれをINNERJOINクエリに変換します。どちらかのテーブルを検索する必要があります。

わかる?


SELECT
    table1.name,
    table2.name
FROM
    table
LEFT JOIN
    table2
    ON table1.id = table2.id
WHERE
    table1.someid = '2'

-- This clause is basically turning this query into an inner join.
-- AND
--     table2.someid = 2

ORDER BY
    table1.order
于 2012-05-18T12:36:17.377 に答える
1

where句に何を入れても、結果セットは影響を受けるテーブルから行を返すようになります。

あなたの場合、table2.someid=2 を要求しています。これは、mysql の場合、左結合の有無にかかわらず、table2 が行を返さなければならないことを意味します。

解決策: where 句の代わりに左結合内でこのフィルターを使用します。

于 2012-05-18T12:32:37.513 に答える
1

あなたの構文は間違っています...

このフィドルを確認してください:http://sqlfiddle.com/#!2/c368d/1

私はあなたのためにこれを書きました、多分それは役に立ちます。

SELECT table1.name, table2.cute 
FROM table1 INNER JOIN table2 ON table1.id_table1 = table2.id_table1
ORDER BY table1.name
于 2012-05-18T13:06:58.533 に答える