我正试图离开两个表。这部分很简单。
我有两个表:product和productupdate
产品表看起来像这样
id | productname | description
productupdate表格如下
id | productname | descriptionupdate
我简化了示例。有更多的列,而不仅仅是那些。
SELECT productname, description
FROM product
LEFT JOIN productupdate ON
product.id = productupdate.id WHERE id = ?
我想要实现的是连接两个表,如果右表(productupdate)中存在描述更新,则仅保留productupdate中的descriptionupdate,而不应保留product表中的描述。
如果我使用左联接,则右表中的所有内容将累加到左表中,并且一个产品将有多个描述。
我应该如何编写查询。
答案 0 :(得分:0)
您可以使用COALESCE
:
SELECT p.productname, COALESCE(pu.descriptionupdate, p.description) AS desciption
FROM product p
LEFT JOIN productupdate pu ON p.id = pu.id
WHERE p.id = ?
答案 1 :(得分:0)
您可以尝试使用IF语句:IF descriptionupdate =''返回description列,否则返回descriptionupdate列。
然后,要加入所有描述,请按ID对结果进行分组,并对列进行组合。
SELECT IF (descriptionupdate='',description,descriptionupdate) as description
FROM product p
LEFT JOIN productupdate pu ON p.id = pu.id
WHERE p.id = ?
GROUP BY p.id
GROUP_CONCAT(description SEPARATOR ' ')
如果您不想对所有描述进行分组,而只是对最后一个描述进行分组,则删除分组部分并排序查询并限制结果
SELECT IF (descriptionupdate='',description,descriptionupdate) as description
FROM product p
LEFT JOIN productupdate pu ON p.id = pu.id
WHERE p.id = ?
ORDER BY orderColumnName DESC LIMIT 1
有关控制流功能的更多信息,请参见documentation。
答案 2 :(得分:0)
以productupdate
中的日期列降序加入表格并进行排序,仅获得第一行:
SELECT
p.productname,
u.description
FROM product p LEFT JOIN productupdate u
ON p.id = u.id
WHERE p.id = ?
ORDER BY u.datecolumn DESC
LIMIT 1