我有一张桌子PROD
ID NAME
1 Apple
2 Banana
相对表格价格,全球价格(ID_USER为空) 或每用户价格(ID_USER)
PROD_ID USER_ID PRICE
1 null 10
1 5 8
现在,我需要一个查询所有产品和相对价格的查询,
问题是,我只是在有一个用户价格的情况下试图检索用户价格,否则检索全球价格
SELECT PROD.* , PRICES.* FROM PROD
LEFT JOIN PRICES ON PROD.ID_PROD = PRICES.ID_PROD
WHERE PRICES.USER_ID IS NULL OR PRICES.USER_ID = 5
此查询返回2行(prod与2个价格连接)
有没有办法只在一个查询中检索产品的确切价格?
谢谢!!
编辑:在连接中,我需要每个用户的价格行(最后一个),只有当行存在时,否则我需要检索具有全局价格的行,这可能吗?答案 0 :(得分:0)
SELECT
prod.*,
COALESCE(p_user, p_default) As Price
FROM
Prod INNER JOIN (SELECT
PROD_ID,
MAX(CASE WHEN USER_ID=5 THEN Price END) p_user,
MAX(CASE WHEN USER_ID IS NULL THEN Price END) p_default
FROM
Prices
GROUP
BY PROD_ID) m_uid
ON Prod.ID = m_uid.Prod_ID
请参阅小提琴here。