SQL:根据多个条件选择数据?

时间:2014-10-23 23:53:30

标签: mysql sql plsql

示例问题:

我有一张名为Candy的桌子,上面有数千条记录,并且有10列有关糖果的信息。我想提取3条记录的数据,我有以下信息:

  1. 糖果1:颜色=黄色,类型=柔软,味道=柠檬
  2. 糖果2:颜色=黄色,类型=硬,味道=柠檬
  3. 糖果3:颜色=红色,类型=硬,味道=樱桃
  4. 我该怎么做?在Psuedo-CodeEnglish中,它将是:

    Select *
    From Candy
    WHERE (Color = Yellow, Type = Soft, Flavor = Lemon)
    AND (Candy 2: Color = Yellow, Type = Hard, Flavor = Lemon)
    AND (Color = Red, Type = Hard, Flavor = Cherry);
    

    但这对我没有用。我正在使用PL / SQL。

3 个答案:

答案 0 :(得分:1)

基本思想是你要找到任何行为true的行,但该行的所有条件都为真。这意味着你需要具有以下结构的东西:___ OR ___ OR ___其中每个___本身就是ands的列表:___ AND ___ AND ____

Select *
From Candy
WHERE (Color = Yellow and Type = Soft and Flavor = Lemon)
or (Color = Yellow and Type = Hard and Flavor = Lemon)
or (Color = Red and Type = Hard and Flavor = Cherry);

答案 1 :(得分:0)

虽然@Denise的答案很好,但在某些情况下,使用关系数据库可以更好地解决此类问题。如果你使用where语句进行单个查询就可以了。但是你可能有不同的要求。例如,保存查询或存储许多不同用户的糖果需求等。

创建选择表。此表有3列(颜色,类型和风味)与您的糖果表相同的类型。还要添加唯一标识符。然后将以下数据添加到表中:

id color   type   flavor
1  Yellow  Soft   Lemon
2  Yellow  Hard   Lemon
3  Red     Hard   Cherry

现在您可以使用以下声明选择您的糖果

SELECT * 
FROM Candy C
JOIN Selection S ON C.color = S.color AND C.type=S.type AND C.flavor=S.flavor

当然这可以扩展...如果您想为用户提供数据,请在选择中添加用户列,然后将以下内容添加到上面

WHERE S.User = 'Hogan'

获得我喜欢的糖果

或许你想要历史。您可以在上面添加日期列,然后说

WHERE S.date = '2014-01-01' 

获得新年的糖果。

答案 2 :(得分:0)

您当前查询不适合您的原因是因为您使用的是AND而不是OR。您的表格中不会有一行color为黄色和红色。但是,您确实希望在三个条件中的每个条件之间使用AND

请改为尝试:

SELECT *
FROM candy
WHERE (color = 'yellow' AND type = 'soft' AND flavor = 'lemon')
    OR (color = 'yellow' AND type = 'hard' AND flavor = 'lemon')
    OR (color = 'red' AND type = 'hard' AND flavor = 'cherry');

这是您的SQLFiddle示例。不幸的是,我不知道你的所有10个列(我不需要),但你会看到查询确实返回了预期的3行。