1

我有 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

4 回答 4

2

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

在您的情况下,左连接。

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'
于 2013-11-01T13:07:02.600 回答
1

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

ALEFT 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'
于 2013-11-01T13:17:27.810 回答
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'
于 2013-11-01T13:07:21.597 回答
0

我建议您不要只是从任何答案中对您的代码进行查询并忘记该主题,而是要阅读和理解它。连接很容易理解,它们是每个 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'
于 2013-11-01T13:30:57.020 回答