从两个表中选择并始终从一个表返回

时间:2013-11-01 13:03:53

标签: mysql sql database

我有Mysql数据库,有两个表,一个有两个键值,第二个与1到N有关。

第一个表总是有数据,但与之相关的第二个表可能没有。 我需要始终从第一个数据中返回数据,如果第二个表中没有,则独立。

继承我的疑问:

select a.*, b.* FROM disp_ofer a, ofer_detl b 
WHERE 
a.esta_cod = 'Lelis' 
AND
a.disp_ofer_data = '2013-10-30 16:07:20'
AND 
b.disp_ofer_data = a.disp_ofer_data
AND
b.esta_cod = a.esta_cod 

4 个答案:

答案 0 :(得分:2)

使用join语法...来连接表。

在你的情况下,LEFT JOIN。

select a.*, b.* FROM disp_ofer a
Left join ofer_detl b  
     on b.disp_ofer_data = a.disp_ofer_data and b.esta_cod = a.esta_cod
WHERE 
a.esta_cod = 'Lelis' 
AND
a.disp_ofer_data = '2013-10-30 16:07:20'

答案 1 :(得分:1)

始终使用JOIN语法,而不是在FROM语句中列出多个表。这被认为是一种更好的做法。

LEFT JOIN将允许您实现此目标。 NATURAL关键字将执行,然后自动加入两个表中存在的所有列。

SELECT a.*, b.*
FROM disp_ofer a
NATURAL LEFT JOIN ofer_detl
WHERE a.esta_cod = 'Lelis' AND a.disp_ofer_data = '2013-10-30 16:07:20'

答案 2 :(得分:0)

select a.*, b.* 
FROM disp_ofer a
LEFT OUTER JOIN ofer_detl b ON (b.esta_cod = a.esta_cod AND b.disp_ofer_data = a.disp_ofer_data)
WHERE 
a.esta_cod = 'Lelis' 
AND
a.disp_ofer_data = '2013-10-30 16:07:20'

答案 3 :(得分:0)

我建议你不要只是对代码的任何答案进行查询而忘记该主题,而是阅读并理解它。联接很容易理解,它们是每个Web开发人员应该知道的基础知识的一部分。我希望This article会帮助你。

下面是我的查询版本:

SELECT do.*, od.*
FROM disp_ofer do
LEFT JOIN ofer_detl od USING(ofer_data, esta_cod)
WHERE 
    do.esta_cod = 'Lelis' 
    AND do.disp_ofer_data = '2013-10-30 16:07:20'