MySQL不满足条件时强制“ WHERE”显示为空

时间:2018-07-13 03:20:43

标签: mysql sql

我在链接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

到目前为止没有问题。

问题

我不想在加入过程中显示widthheight,所以我该怎么做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_idvalues可能为null,因为我不知道它的值。但我已经知道propertiesimage_location。这样,我无法显示图片而不是产品。

我尝试过的事情

  1. 来自@shree.pat18中的here

这是我从中实现的查询:

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

有解决方案,谢谢您的时间。

1 个答案:

答案 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'