【问题标题】:Mysql join where value or nullmysql join where value or null
【发布时间】:2014-02-12 11:16:23
【问题描述】:

我有一张桌子 PROD

ID    NAME
1     Apple
2     Banana

还有相对表 PRICES ,具有全局价格(ID_USER 为 Null) 或每用户价格 (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 个价格相连)

有没有一种方法可以在一次查询中检索产品的确切价格?

谢谢!!

编辑:在连接中,只有当该行存在时,我才需要每个用户的价格行(最后一个),否则我需要检索具有全球价格的行,这可能吗?

【问题讨论】:

  • 具体价格是多少?
  • 由于不清楚要求,请详细说明问题。
  • 如果用户已登录,我将使用 USER_ID = (logged user id) 获取价格,但某些产品可能没有每个用户的价格,因此我需要使用USER_ID = NULL
  • 哦,这很简单。见 COALESCE()

标签: mysql join


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2011-06-28
    • 2017-07-31
    • 1970-01-01
    相关资源
    最近更新 更多