我在链接2个表时遇到问题,其中的一个表没有价值,因此无法显示。为了简化此操作,我创建了一个临时表来显示:
详细信息
ps_product table
product_id name
1 Product 1
2 Product 2
3 Product 3
需要链接到另一个表以显示图像路径的:
ps_product_details table
details_id product_id properties value
1 1 image_location 1.jpg
2 1 width 10 cm
3 1 height 5 cm
4 2 image_location 2.jpg
5 3 width 9 cm
6 3 height 5 cm
如此处所示,我可以与LEFT JOIN
一起加入他们:
SELECT * FROM ps_product
LEFT JOIN ps_product_details ON ps_product.id = ps_product_details.product_id
结果是这样的:
product_id name details_id product_id properties values
1 Product 1 1 1 image_location 1.jpg
1 Product 1 2 1 width 10 cm
1 Product 1 3 1 height 5 cm
2 Product 2 4 2 image_location 2.jpg
3 Product 3 5 3 width 9 cm
3 Product 3 6 3 height 5 cm
到目前为止没有问题。
问题
我不想在加入过程中显示width
和height
,所以我该怎么做WHERE properties = 'image_location'
,但是当我输入时,它显示如下: / p>
product_id name details_id product_id properties values
1 Product 1 1 1 image_location 1.jpg
2 Product 2 4 2 image_location 2.jpg
如此处所示,产品3消失,因为没有图像,我不想证明产品3不存在,它只没有图像。
我真正想要的是
product_id name details_id product_id properties values
1 Product 1 1 1 image_location 1.jpg
2 Product 2 4 2 image_location 2.jpg
3 Product 3 null 3 image_location null
details_id
和values
可能为null,因为我不知道它的值。但我已经知道properties
是image_location
。这样,我无法显示图片而不是产品。
我尝试过的事情
这是我从中实现的查询:
SELECT * FROM ps_product
LEFT JOIN ps_product_details ON ps_product.id = ps_product_details.product_id
where (properties = 'image_location') or (properties = properties)
与此查询更早相同:
SELECT * FROM ps_product
LEFT JOIN ps_product_details ON ps_product.id = ps_product_details.product_id
有解决方案,谢谢您的时间。
答案 0 :(得分:3)
将条件放在ON
子句中,而不是WHERE
子句中:
SELECT *
FROM ps_product p
LEFT JOIN ps_product_details pd ON p.id = pd.product_id AND pd.properties = 'image_location'
如果您想成为真正的挑剔者,可以在coalesce()
子句中SELECT
:
SELECT p.product_id, p.name, pd.details_id, p.product_id, coalesce(pd.properties,'image_location') as properties, pd.values
FROM ps_product p
LEFT JOIN ps_product_details pd ON p.id = pd.product_id AND pd.properties = 'image_location'