2014-11-23 385 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