0

如何选择 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

4

3 回答 3

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
于 2013-02-20T02:15:22.460 回答
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表示将返回第一个表中的所有记录,即使第二个表中没有匹配项。

于 2013-02-20T02:15:57.563 回答
1

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

SELECT * FROM store_profile sp LEFT JOIN store_fee sf ON (sf.store_id = sp.id)
于 2013-02-20T02:15:58.927 回答