我有两张桌子。 我想获取最新的updated_product_id,如果第二个表中存在其他product_id从第一个表中。 我第一台sr_client_products如果从第一个表中存在数据,如何从第二个表获取单个值?
id | product_id| client_id
1 | 1 | 1
和第二台sr_client_product_updates
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
**预期输出:单排柱
updated_product_id = 4 as of updated_date
,如果第二个表sr_client_product_updates没有值那么
product_id = 1 from first table
。
** 直到现在查询
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
上述查询的问题在于它显示的数据,如果在第二个表中存在的值否则返回空的,我认为这个问题是与在查询还 输出: PRODUCT_ID = 4如果在第二表中存在数据 别的 PRODUCT_ID = 1,如果第二个表是空
被修改的查询:
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
解决方案,鉴于@Philipp
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.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 where sr_client_products.id=1
,这是什么样的数据您预期的结果? – Blank
的product_id = 4,如果在第二个表中存在的数据 否则 的product_id = 1,如果第二个表是空 –
需要一些澄清 – JYoThI