示例问题:
我有一张名为Candy的桌子,上面有数千条记录,并且有10列有关糖果的信息。我想提取3条记录的数据,我有以下信息:
我该怎么做?在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。
答案 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行。