SQL-选择与3种组合条件中的几种匹配的值

时间:2019-06-25 16:37:44

标签: mysql select

尝试解决此问题并未能在网上寻找答案后,我辞职寻求帮助-因此,我们将不胜感激!

我有一个具有以下结构的SQL表:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(25)     | NO   | PRI | NULL    | auto_increment |
| municipality | varchar(50) | NO   | MUL | NULL    |                |
| admin        | varchar(50) | NO   |     | NULL    |                |
| country      | varchar(50) | NO   |     | NULL    |                |
| longitude    | varchar(50) | NO   |     | NULL    |                |
| latitude     | varchar(50) | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

,并且我希望 SELECT 该表的子集,其中满足多个三重条件,例如: municipality = 'New York', admin = 'New York', country = 'United States'。我希望这样做,并且不仅要在municipality上进行选择,因为有时在不同的管理区域中存在相同的地名。

这是我到目前为止尝试过的:

SELECT * FROM locations WHERE (municipality, admin, country) IN 
('Pearl River', 'New York', 'United States'), 
('Shelton', 'Washington', 'United States'), 
('Granite', 'Illinois', 'United States'), 
('Washington', 'Pennsylvania', 'United States'), 
('Erlanger', 'Kentucky', 'United States'), 
('Warren', 'Ohio', 'United States');

以及:

SELECT * FROM locations WHERE municipality IN ('Pearl River', 'Shelton', 'Granite', 'Washington', 'Erlanger', 'Warren') 
AND WHERE admin IN ('New York', 'Washington', 'Illinois', 'Pennsylvania', 'Kentucky', 'Ohio') 
AND WHERE country IN ('United States', 'United States', 'United States', 'United States', 'United States', 'United States');

但两个查询仅返回此标准错误:could not run statement: You have an error in your SQL syntax;

我真的希望有人可以帮助我,在此先多谢!

2 个答案:

答案 0 :(得分:1)

您应该在要与之匹配的元组列表的前面加上括号,并在它们前面加上“ VALUES”。例如,

SELECT * FROM locations WHERE (municipality, admin, country) IN (
    VALUES 
        ('Pearl River', 'New York', 'United States'), 
        ('Pearl', 'New York', 'United States'), 
        ('Athens', 'Georgia', 'United States')
);

我已经针对具有以下结构的sqlite数据库进行了测试,我认为它会返回正确的输出。

CREATE TABLE locations (municipality TEXT, admin TEXT, country TEXT);
INSERT INTO locations VALUES('Pearl River','New York','United States');
INSERT INTO locations VALUES('Pearl River','Alabama','United States');
INSERT INTO locations VALUES('Athens','Georgia','United States');

返回以下内容:

Pearl River|New York|United States
Athens|Georgia|United States

-NINJA EDIT-

请注意,以上查询在SQLite中有效,但在MySQL中无效。要使此查询适用于MySQL,只需删除“ VALUES”关键字,但是将括号括在元组列表中至关重要。例如,

SELECT * FROM locations WHERE (municipality, admin, country) IN (
        ('Pearl River', 'New York', 'United States'), 
        ('Pearl', 'New York', 'United States'), 
        ('Athens', 'Georgia', 'United States')
);

答案 1 :(得分:0)

选择*从城市所在位置(“珍珠河”,“谢尔顿”,“花岗岩”,“华盛顿”,“埃尔兰格”,“沃伦”) 和管理员(“纽约”,“华盛顿”,“伊利诺伊州”,“宾夕法尼亚州”,“肯塔基州”,“俄亥俄州”) AND国家IN(“美国”,“美国”,“美国”,“美国”,“美国”,“美国”);

在哪里就足够了。