如果第一个表中存在其他数据,如何从第二个表中获取单个值?

时间:2016-07-21 06:49:55

标签: mysql

我有两张桌子。 我想从第一个表中获取最新的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

4 个答案:

答案 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子句。

Fiddle for example data

Fiddle for empty second table

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