2014-11-23 387 views
1

我在使用IF語句中的子查詢獲取MySQL SELECT語句的語法時遇到了問題。在IF語句中使用子查詢的MySQL SELECT語句的語法


編輯

我需要的,如果指定了特定值,包括在數據庫查詢的子查詢。在這個特定的例子中,如果他們已經指定了Item,那麼只會獲取Item和Price也與特定值匹配的行。

SELECT * FROM Products WHERE Products.Color = :Colors_like 
AND IF(Item = IS NOT NULL OR Item != '' 
(Item = :Item AND Products.Price <= (SELECT $MaxPrice_Item FROM Lifestyle WHERE User_id = $User_id)) 
) 

我已經包括下面的硬編碼值


簡化片斷這正常工作:

SELECT * FROM Products WHERE Color = 'Black' 
AND IF (Item = 'Dresses', 1, 0) = 1 

這不起作用(如果項目=連衣裙,它應該檢查價格)

SELECT * FROM Products WHERE Color = 'Black' 
AND IF (Item = 'Dresses' (SELECT * FROM Products WHERE Price < '$300'), 1, 0) = 1 

我試過了所有我能想到的格式,但我似乎無法讓語句正常工作。

+0

「這行不通」 ---它實際上應該怎麼辦?查詢完全被破壞,很難猜測你想表達什麼。 PS:'Where價格<'$ 300''您是否真的將價格存儲爲'$'char字符串前綴? – zerkms 2014-11-23 23:55:17

+0

@zerkms - 我只是澄清它應該做什麼:-)(道歉,如果我不清楚) – 2014-11-23 23:58:14

+0

它仍然不清楚。嘗試用領域語言解釋。喜歡:我需要選擇黑色的產品...並且... PS:你還沒有回答價格PPS:'IF(Item ='Dresses',1,0)= 1' - 這使得沒有感。所以試圖以「類似的方式」來解決它是錯誤的設計。 – zerkms 2014-11-23 23:59:35

回答

1

你需要再選擇前一個東西:

SELECT * 
FROM Products 
WHERE Color = 'Black' AND 
    IF (Item = 'Dresses' ?? (SELECT * FROM Products WHERE Price < '$300'), 1, 0) = 1 
--------------------------^ 

我不太清楚,因爲還有很多其他的問題,如:其中一個標量子查詢預計

  • 使用*
  • 使用'$300'推測可以與一個數字進行比較。 (或者更糟糕的是,將「價格」存儲爲字符串。)
  • 具有標量子查詢會返回多行。

如果你想有條件的邏輯,那麼這就是我想你想:

SELECT p.* 
FROM Products p 
WHERE p.Color = 'Black' AND 
     (p.Item <> 'Dresses' OR p.Price < 300) 
+0

@zerkms。 。 。我重述了這一部分。 – 2014-11-24 00:05:21

+0

我不清楚爲了讓IF語句正常工作,我需要在子集之前添加什麼,所以我希望我剛剛添加到問題中的信息應該有助於說明我在嘗試什麼去做 – 2014-11-24 00:51:54