2013-05-02 37 views
0

我有兩個表。子句在mysql中

表DB1和DB2

DB1 
+-----------+------------+ 
| id  | nameDb | 
+-----------+------------+ 
| 1  | name1 | 
+-----------+------------+ 
| 2  | name2 | 
+-----------+------------+ 
| 3  | name3 | 
+-----------+------------+ 

DB2

+------------+------------+-------------+----------------------+ 
| id  | name  | id_db1 |   date  | 
+------------+------------+-------------+----------------------+ 
| 1  | test1 |  1  | 2013-05-10 10:00:00 | 
+------------+------------+-------------+----------------------+ 
| 2  | test2 |  1  | 2013-05-10 11:00:00 | 
+------------+------------+-------------+----------------------+ 
| 3  | test3 |  1  | 2013-05-10 11:10:00 | 
+------------+------------+-------------+----------------------+ 
| 4  | test4 |  1  | 2013-05-10 11:40:00 | 
+------------+------------+-------------+----------------------+ 

我的查詢是這樣的:

SELECT a.nameDb, b.name FROM db1 a 
LEFT JOIN db2 b ON b.id_db1 = a.id 
WHERE DATE_FORMAT(b.name, '%Y-%m-%d') = '2013-05-10' 

我需要返回相關的一切的那一天,這是不相關的絕也出現...

類似於

+------------+------------+ 
| nameDb | name  | 
+------------+------------+ 
| name1 | test1 | 
+------------+------------+ 
| name1 | test2 | 
+------------+------------+ 
| name1 | test3 | 
+------------+------------+ 
| name1 | test4 | 
+------------+------------+ 
| name2 | NULL  | 
+------------+------------+ 
| name3 | NULL  | 
+------------+------------+ 

有什麼想法嗎?

回答

2

試試這個

SELECT a.nameDb, b.name FROM db1 a 
LEFT JOIN db2 b ON b.id_db1 = a.id 
and DATE_FORMAT(b.date, '%Y-%m-%d') = '2013-05-10' 

如果您使用的WHERE子句中左外連接的表,它的行爲像內部聯接

+1

http://sqlfiddle.com/#!2/c36e8/3 – 2013-05-02 18:20:57

+0

但磋商正在使用 – 2013-05-02 18:21:40

+0

@JoachimIsaksson,感謝小提琴鏈接 – 2013-05-02 18:23:19

0

你應該只需要一個RIGHT JOIN或周圍交換表,你可以使用一個LEFT JOIN

SELECT a.nameDb, b.name 
FROM db1 a 
    RIGHT JOIN db2 b ON b.id_db1 = a.id AND DATE_FORMAT(b.name, '%Y-%m-%d') = '2013-05-10' 
0

你應該在哪裏換到一個與,使日期檢查作爲您的加入條件的一部分:

SELECT a.nameDb, b.name FROM db1 a 
LEFT JOIN db2 b ON b.id_db1 = a.id 
AND DATE_FORMAT(b.name, '%Y-%m-%d') = '2013-05-10'