我有两张桌子。 我想从第一个表中获取最新的updated_product_id(如果存在于第二个表中,而不是product_id )。 我有第一个表sr_client_products
.ctext-wrap {
display: flex;
justify-content: space-between;
margin: 0 auto;
max-width: 50%;
text-align: left;
}
和第二个表sr_client_product_updates
id | product_id| client_id
1 | 1 | 1
**预期输出:单行列
id | product_id| updated_product_id | client_product_id| updated_date
1 | 1 | 2 | 1 | 2016-02-03
2 | 2 | 4 | 1 | 2016-06-07
如果第二个表sr_client_product_updates没有值,那么
updated_product_id = 4 as of updated_date
。** 直到现在查询
product_id = 1 from first table
以上查询的问题是它显示数据,如果第二个表中存在值,则else返回空,我认为问题是在哪里查询也 输出: 如果第二个表中存在数据,则product_id = 4 其他 如果第二个表为空,则product_id = 1
编辑查询:
SELECT
if(ProductUpdate.updated_product_id = '',
(select ClientProduct.product_id from sr_client_products ClientProduct where ClientProduct.client_id=1),
ProductUpdate.updated_product_id)
as product_id
from sr_client_product_updates ProductUpdate where ProductUpdate.client_product_id=1 order by ProductUpdate.updated_date DESC limit 1
解决方案由@Philipp提供
SELECT
if(count(*) = 0,
(select ClientProduct.product_id from sr_client_products ClientProduct where ClientProduct.client_id=1),
ProductUpdate.updated_product_id)
as product_id
from sr_client_product_updates ProductUpdate
where ProductUpdate.client_product_id=1
order by ProductUpdate.updated_date DESC limit 0,100
答案 0 :(得分:1)
SELECT
COALESCE (
sr_client_product_updates.updated_product_id,
sr_client_products.product_id
) AS id
FROM
sr_client_products
LEFT JOIN (
SELECT
MAX(updated_date) AS update_date,
client_product_id
FROM
sr_client_product_updates
GROUP BY
client_product_id
) AS lastUpdate ON lastUpdate.client_product_id = sr_client_products.client_product_id
LEFT JOIN sr_client_product_updates ON sr_client_product_updates.client_product_id = lastUpdate.client_product_id
AND sr_client_product_updates.updated_date = lastUpdate.update_date
如果存在与实际product_id相对应的product_id,则返回更新的product_id。如果没有更新的id,则返回product_id。
虽然我不确定您需要使用哪些列进行连接,但product_id将是显而易见的选择,但您的示例会让它有点奇怪。因此,您可能需要修复ON
子句。
答案 1 :(得分:0)
不确定你真正想做什么,但试试这个:
select coalesce(t2.updated_product_id, t1.product_id) as product_id
from sr_client_product_updates t1
left join sr_client_products t2
on t1.client_product_id = t2.client_id
where t1.client_product_id = 1
答案 2 :(得分:0)
问题是在if语句中你查询不会返回''如果值没有退出它返回空结果所以使用count(*)它总是返回一个值,即使结果是空的
SELECT
if(count(*) = 0,
(select ClientProduct.product_id from sr_client_products ClientProduct where ClientProduct.client_id=1),
ProductUpdate.updated_product_id) as product_id
FROM
sr_client_product_updates ProductUpdate
WHERE
ProductUpdate.client_product_id = 1
ORDER BY
ProductUpdate.updated_date DESC limit 1
答案 3 :(得分:0)
我认为你需要一个简单的内连接
SELECT sr_client_product_updates.updated_product_id
FROM sr_client_products
INNER JOIN sr_client_product_updates on
sr_client_product_updates.updated_product_id = sr_client_products.product_id;