Mysql 从两个表中选择,并始终从一个表返回
我有一个Mysql数据库,有两个表,一个表有两个键值,第二个表与它1到N相关 第一个表始终有数据,但与之相关的第二个表可能没有数据。 我需要始终从第一个表返回数据,如果第二个表中没有数据,则独立返回 我的问题是:Mysql 从两个表中选择,并始终从一个表返回,mysql,sql,database,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
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
使用语法。。。连接表
在您的情况下,使用左连接
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'
始终使用语法,而不是在FROM
语句中列出多个表。这被认为是一种更好的做法
左连接将允许您实现此目标。NATURAL
关键字将自动对两个表中存在的所有列执行join
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'
我建议你不要只是对代码的任何答案提出疑问,忘记这个主题,而是阅读和理解它。连接非常容易理解,并且是每个web开发人员都应该知道的基础知识的一部分。我希望能帮助你
下面是我对您的查询的版本:
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'
使用左连接
。另外,我假设“有两个键值”实际上是指一个复合主键,对吗?@darkman,你不应该仅仅根据声誉或投票来选择答案。我的answser格式更好,内容更多。我可以问你为什么选择另一个吗?OUTER
关键字不是必需的。是的,但是可以理解
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'