如何选择2个条件表并显示所有数据

时间:2013-02-20 02:13:24

标签: mysql

如何选择2个条件表并显示所有数据

store_profile
id + store_name
1  | Accessorize.me 
2  | Active IT 
3  | Edushop
4  | Gift2Kids
5  | Heavyarm 
6  | Bamboo 

store_fee
id + store_id + date_end
1  |    1     | 27-6-2013
2  |    2     | 29-8-2013
3  |    3     | 02-6-2013
4  |    4     | 20-4-2013

以下是我之前的查询

$query = "select sp.id, sp.store_name, sf.id, sf.store_id, sf.date_end from store_profile sp, store_fee sf where sf.store_id=sp.id"

结果是这样的:

1  | Accessorize.me  27-6-2013
2  | Active IT       29-8-2013
3  | Edushop         02-6-2013
4  | Gift2Kids       20-4-2013

但我想要的是显示所有商店名称,包括date_end,但如果没有date_end仍然可以显示商店名称为空date_end

3 个答案:

答案 0 :(得分:1)

使用左连接:

select sp.id, sp.store_name, sf.id, sf.store_id, sf.date_end 
from store_profile sp left join store_fee sf on sf.store_id=sp.id

答案 1 :(得分:1)

您使用的语法被解释为INNER JOIN,这意味着store_profile中没有相应条目的商店将不会显示。您想使用LEFT JOIN

SELECT sp.id, sp.store_name, sf.id, sf.store_id, sf.date_end 
FROM store_profile sp
LEFT JOIN store_fee sf 
ON sf.store_id=sp.id

LEFT JOIN表示即使第二个表中没有匹配项,也会返回第一个表中的所有记录。

答案 2 :(得分:1)

您想使用外部联接。使用外连接时,连接表上的列不需要与连接表中的条件列匹配即可获得结果:

SELECT * FROM store_profile sp LEFT JOIN store_fee sf ON (sf.store_id = sp.id)