Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从两个表中选择,并始终从一个表返回_Mysql_Sql_Database - Fatal编程技术网

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

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

我有一个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 
使用语法。。。连接表

在您的情况下,使用左连接

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'