簡體   English   中英

MySQL CASE和INNER一起加入?

[英]MySQL CASE & INNER JOIN Together?

我有以下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語句之間,但它沒有用。

提前致謝。

您無法以您希望的方式進行條件連接,但您可以改為:

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為了表有記錄,即使加入條件不滿足 了解SQL連接

WHERE子句通過消除任何預期在parking_lots沒有匹配記錄的結果來模仿INNER JOIN的效果; 如果你實際上不想要這種行為,它可以省略。

目前還不是很清楚你想要什么。 也許你需要一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM