-1

1 つまたはいくつかのテーブルにレコードがない 2 つ以上のテーブルがある場合、

CREATE TABLE t1
(`id1` int, `date1` datetime, `val1` int)
;
INSERT INTO t1
(`id1`, `date1`,`val1`)
VALUES  
(1, '2013-11-10 14:57:09',10),
(2, '2013-11-10 16:59:37',15),
(4, '2013-11-11 15:12:44',11)
;

CREATE TABLE t2
(`id2` int, `date2` datetime, `val2` int)
;
INSERT INTO t2
(`id2`, `date2`,`val2`)
VALUES  
(1, '2013-11-10 14:57:09',22),
(2, '2013-11-10 16:59:37',4),
(4, '2013-11-12 12:12:44',7)
;

私はこれを使用します:

SELECT * 
FROM t1,t2
WHERE 
  (t1.date1 >= '2013-11-11 13:00:00'  AND t1.date1 < '2013-11-11 15:00:00')  and 
  (t2.date2 >= '2013-11-11 00:00:00'  AND t2.date2 < '2013-11-11 23:59:59') 
LIMIT 1

そして出力

MySQL returned an empty result set (i.e. zero rows).

テーブル t2 に一致するレコードがないため

このような出力が必要な場合

+------+---------------------+------+------+
| id1  | date1               | val1 | val2 |
+------+---------------------+------+------+
|    1 | 2013-11-10 14:57:09 |   10 |    0 |
+------+---------------------+------+------+

これは可能ですか?

4

1 に答える 1

3

を使用しLEFT JOINます。結合されるテーブルの条件はすべて、句に含める必要があります。これは、条件をON句に入れるWHEREと null 一致が除外されるためです。

SELECT *
FROM t1
LEFT JOIN t2 ON t2.date2 BETWEEN '2013-11-11 00:00:00'  AND '2013-11-11 23:59:59'
WHERE t1.date1 BETWEEN '2013-11-11 00:00:00'  AND '2013-11-11 23:59:59'

4つのテーブルでそれを行う方法は次のとおりです。

SELECT *
FROM t1
LEFT JOIN t2 ON t2.date2 BETWEEN '2013-11-11 00:00:00'  AND '2013-11-11 23:59:59'
LEFT JOIN t3 ON t3.date3 BETWEEN '2013-11-11 00:00:00'  AND '2013-11-11 23:59:59'
LEFT JOIN t4 ON t3.date4 BETWEEN '2013-11-11 00:00:00'  AND '2013-11-11 23:59:59'
WHERE t1.date1 BETWEEN '2013-11-11 00:00:00'  AND '2013-11-11 23:59:59'
于 2013-11-11T18:27:35.140 に答える