在我的项目中,我有两个这样的表:
parameters (
id PRIMARY KEY,
name
)
和
parameters_offeritems (
id_offeritem,
id_parameter,
value,
PRIMARY KEY (id_offeritem, id_parameter)
)
我没有显示 offeritems
表的结构,因为它没有必要。
一些示例数据:
INSERT INTO parameters (id, name) VALUES
(1, 'first parameter'), (2, 'second parameter'), (3, 'third parameter')
INSERT INTO parameters_offeritems (id_offeritem, id_parameter, value) VALUES
(123, 1, 'something'), (123, 2, 'something else'), (321, 2, 'anything')
现在我的问题是 - 如何获取(对于给定的优惠 ID)所有现有参数的列表,而且,如果对于给定的优惠 ID 设置了一些参数,我想获取它们一次查询中的值。
到目前为止,我做了这样的查询:
SELECT p.*, p_o.value FROM parameters p LEFT JOIN parameters_offeritems p_o
ON p.id = p_o.id_parameter WHERE id_offeritem = OFFER_ID OR id_offeritem IS NULL
但它仅获取那些在 parameters_offeritems
表中没有现有记录的参数,或者或参数,仅针对当前报价设置了值。
最佳答案
要获取所有参数以及为特定优惠项目设置的任何参数的值,您需要将优惠 ID 逻辑移至连接中,如下所示(见下文)。
SELECT p.*, p_o.value
FROM parameters p
LEFT JOIN parameters_offeritems p_o
ON p.id = p_o.id_parameter
AND id_offeritem = OFFER_ID;
如果您的 WHERE
子句中的逻辑引用了您正在执行 LEFT JOIN
的表中的字段,则您可以有效地更改您的 JOIN
到 INNER JOIN
(除非您要检查 NULL)。
关于mysql - LEFT JOIN - 从左表中获取所有数据,右表中没有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28258393/