【问题标题】:I cannot use the INTERSECT operator [duplicate]我不能使用 INTERSECT 运算符 [重复]
【发布时间】:2020-10-11 00:35:35
【问题描述】:

我正在尝试解决这个问题:

'从 STATION 查询以元音(即 a、e、i、o 和 u)作为首尾字符的城市名称列表。您的结果不能包含重复项。'

我尝试使用这样的 INTERSECT 运算符解决它:

SELECT CITY 
FROM STATION 
WHERE LEFT(CITY, 1) = 'A' OR LEFT(CITY, 1) = 'O'
OR LEFT(CITY, 1) = 'E' OR LEFT(CITY, 1) = 'I' OR
LEFT (CITY, 1) OR LEFT(CITY, 1) = 'U'

INTERSECT

SELECT CITY
FROM STATION
WHERE RIGHT(CITY, 1) = 'A' OR RIGHT(CITY, 1) = 'O'
OR RIGHT(CITY, 1) = 'E' OR RIGHT(CITY, 1) = 'I' OR
RIGHT (CITY, 1) OR RIGHT(CITY, 1) = 'U';

但我收到以下错误消息:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTERSECT
SELECT CITY
FROM STATION
WHERE RIGHT(CITY, 1) = 'A' OR RIGHT(CITY, 1)' at line

我做错了什么,我还有什么其他方法可以解决这个问题?

【问题讨论】:

  • MySQL 不支持 INTERSECT。
  • 你应该学会在布尔表达式中使用括号:WHERE (LEFT(CITY, 1) = 'A' OR ...) AND (RIGHT(CITY, 1) = 'A' OR ...)。或者按照 GMB 的建议使用正则表达式。

标签: mysql sql select where-clause intersect


【解决方案1】:

你可以使用join:

SELECT CITY1 AS CITY
FROM
(
    SELECT CITY AS CITY1
    FROM STATION 
    WHERE LEFT(CITY, 1) = 'A' OR LEFT(CITY, 1) = 'O'
    OR LEFT(CITY, 1) = 'E' OR LEFT(CITY, 1) = 'I' OR
    LEFT (CITY, 1) OR LEFT(CITY, 1) = 'U'
) AS T1 JOIN (
    SELECT CITY AS CITY2
    FROM STATION
    WHERE RIGHT(CITY, 1) = 'A' OR RIGHT(CITY, 1) = 'O'
    OR RIGHT(CITY, 1) = 'E' OR RIGHT(CITY, 1) = 'I' OR
    RIGHT (CITY, 1) OR RIGHT(CITY, 1) = 'U'
) AS T2 ON CITY1 = CITY2

【讨论】:

    【解决方案2】:

    STATION 中查询CITY 名称列表,这些名称的第一个和最后一个字符都是元音。

    您似乎过于复杂了。据我了解这个问题,您只需要一个过滤表一次的where 子句 - 正则表达式很方便:

    select city
    from station
    where city regexp '^[aeiou].*[aeiou]$'
    

    该模式描述了一个以 wovel 开头和结尾的字符串(^ 表示字符串的开头,$ 是结尾)。

    如果表中有重复的city,请改用select distinct city from ...

    如果你想使用left()right()

    select city
    from station
    where 
        right(city, 1) in ('a', 'e', 'i', 'o', 'u')
        and left(city, 1) in ('a', 'e', 'i', 'o', 'u')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      相关资源
      最近更新 更多