我有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
答案 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'