2016-10-31 5 views
0

私は2テーブル(以下のサンプル)MySQLの "AND" 文の問題

aTable 
------------------------------------------------- 
name | datein     | dateout 
test | 2016-10-10 00:00:00  | null --->> This one 
test2 | 2016-10-12 00:00:00  | null 
------------------------------------------------- 

bTable 
------------------------------------------------------------ 
name | datein     | dateout 
test | 2016-05-05 00:00:00  | 2016-06-06 00:00:00 
test | 2016-10-10 00:00:00  | null --->> This one 
test2 | 2016-10-12 00:00:00  | 2016-10-13 00:00:00 
------------------------------------------------------------ 

を持って、私は両方nameデータを抽出したい、datein等しいdateoutある

nullであるI以下のクエリを使用していますが、私は空の応答を取得します。

SELECT name,datein 
FROM aTable 
WHERE (name = 'test' AND dateout IS NULL) AND 
     (SELECT name FROM bTable WHERE name = 'test' AND dateout IS NULL) 

欠けている点はありますか?

答えて

2

をお試しください:

SELECT t1.name, t1.datein 
FROM aTable AS t1 
WHERE (t1.name = 'test' AND t1.dateout IS NULL) AND 
     EXISTS(SELECT name 
      FROM bTable AS t2 
      WHERE t2.name = 'test' AND 
        t2.datein = t1.datein AND 
        t2.dateout IS NULL) 

または、nameフィールドの特定の値を入力せず:

SELECT t1.name, t1.datein 
FROM aTable AS t1 
WHERE t1.dateout IS NULL AND 
     EXISTS(SELECT name 
      FROM bTable AS t2 
      WHERE t2.name = t1.name AND 
        t2.datein = t1.datein AND 
        t2.dateout IS NULL) 
+0

うわー、このような素晴らしい説明、ありがとう! –

1

あなたはあなたのクエリにEXISTSを追加する必要があり、この

SELECT name,datein,dateout FROM(select * from atable union select * from btable)as tt 
where tt.name ='test' and tt.dateout is null; 
+0

なぜこれを試してみてください?それは何が変わるのですか?それは何をするためのものか?あなたの答えを説明する。 – Martin