1

次のSQLを使用しています。

SELECT DISTINCT NAME
FROM Events t1
LEFT JOIN UserHistory t2 ON t1.Name = t2.Event
WHERE t2.Event IS NULL

テーブル 2 が Null であるテーブル 1 からすべての行を選択するには。これにより、表 2 にデータがあるすべての表 1 データが効果的に除外されます。ただし、テーブル 2 の列が特定の値に等しい場合にのみこれを適用したいと考えています。したがって、私はやろうとしていますが、SELECT * FROM t2 WHERE t2.ID = 1これがこのクエリにどのように適合するかはわかりません.

4

3 に答える 3

3
SELECT DISTINCT NAME
FROM Events t1
LEFT JOIN UserHistory t2 ON t1.Name = t2.Event and t2.certain_column = 1234
WHERE t2.Event IS NULL
于 2013-11-12T11:30:08.093 に答える
2

また、NOT EXISTS でクエリを試すこともできます。

SELECT DISTINCT NAME
FROM Events t1
WHERE NOT EXISTS(SELECT * FROM UserHistory t2 
                          WHERE t1.Name = t2.Event AND t2.ID = 1)
于 2013-11-12T11:50:03.017 に答える
1

JOIN 条件に述語を追加する必要があります。

SELECT DISTINCT NAME
FROM Events t1
LEFT JOIN UserHistory t2 ON t1.Name = t2.Event AND t2.ID = 1
WHERE t2.Event IS NULL;

これを に追加すると、WHERE効果的に外部結合が内部結合に変わります。つまり、行は返されません ( NULL = 1false と評価されるため)。

于 2013-11-12T11:30:27.823 に答える