MySQL CASE&内联合在一起?

时间:2012-05-12 07:23:34

标签: mysql

我有以下SQL查询。

SELECT MIN(PLD.available_date) as 'FROM', MAX(PLD.available_date) as 'UNTIL', (
CASE
    WHEN DATEDIFF('2012-04-01', '2012-04-10') = (COUNT(PLD.available_date) - 1)
    THEN 'Yes'
    ELSE 'No'
END) as isAvailable, PL.*
FROM `parking_lot_dates` as PLD
INNER JOIN parking_lots as PL ON PLD.plid = PL.plid
WHERE PLD.available_date BETWEEN '2012-04-01' AND '2012-04-10'
GROUP BY PLD.plid

但是可以将INNER JOIN放入CASE吗?我想要完成的是,当isAvailable列的值为Yes时,抓住额外的信息,否则不要抓住它。

我尝试将INNER JOIN放在CASE语句之间,但它没有用。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您不能以您想要的方式进行条件加入,但您可以改为:

SELECT PLD.FROM, PLD.UNTIL, IF(PLD.isAvailable, 'Yes', 'No') AS isAvailable, PL.*
FROM (
    SELECT   plid
      ,      MIN(available_date) AS `FROM`
      ,      MAX(available_date) AS `UNTIL`
      ,      DATEDIFF('2012-04-01', '2012-04-10') = COUNT(*) - 1 AS `isAvailable`
    FROM     parking_lot_dates
    WHERE    available_date BETWEEN '2012-04-01' AND '2012-04-10'
    GROUP BY plid
  ) AS PLD LEFT JOIN parking_lots AS PL ON (
    PLD.isAvailable AND PL.plid = PLD.plid
  )
WHERE NOT (PLD.isAvailable AND PL.plid IS NULL)

子查询在parking_lot_dates表上执行分组操作,我们在该表和parking_lots表之间建立外连接,以便即使连接条件不<时也有记录/ em>满意。了解SQL joins

WHERE子句模仿INNER JOIN的效果,通过消除parking_lots中预期没有匹配记录的任何结果;如果你实际上不想要这种行为,可以省略它。

答案 1 :(得分:0)

目前还不是很清楚你想要什么。也许你只需要一个HAVING条款:

SELECT PL.*
FROM parking_lot_dates AS PLD
  INNER JOIN parking_lots AS PL 
    ON PLD.plid = PL.plid
WHERE PLD.available_date BETWEEN '2012-04-01' AND '2012-04-10'
GROUP BY PLD.plid
HAVING DATEDIFF('2012-04-01', '2012-04-10') = COUNT(PLD.available_date) - 1