【问题标题】:SQL How to select "id_owner" that contains all cars from a listSQL如何从列表中选择包含所有汽车的“id_owner”
【发布时间】:2019-05-25 03:04:26
【问题描述】:

我正在尝试从虚构的汽车及其所有者表(例如“id”、“owner_id”、“carname”)中检索“id_owner”列表。此车主列表应包含另一个列表中的所有汽车。

应该是这样的: SELECT id_owner FROM ownedcars WHERE carname = "Ferrari" or carname = "Mustang" or carname = "Porsche"

我认为它需要在子查询中执行,因为我尝试过的所有方式,列表返回包含此列表中任何汽车的所有 id_owners,而不是包含列表中的所有三辆汽车

【问题讨论】:

  • SELECT * FROM mytable WHERE column1 LIKE '%word1%' AND column1 LIKE '%word2%' AND column1 LIKE '%word3%' 喜欢这样吗?
  • 欢迎来到 Stack Overflow。您的问题没有包含足够有用的详细信息,我们无法为您提供帮助。查看How To AskMinimal, Complete, Verifiable Example 的重要性。之后,Start Here 根据需要编辑您的问题。

标签: sql select contains


【解决方案1】:

我认为它需要在子查询中执行,因为我的所有方式 尝试过,该列表返回包含任何此汽车的所有 id_owners 列表,而不是包含列表中的所有三辆车

根据上面的信息,您可以使用 EXISTS 运算符来实现您的目标。

SELECT id_owner FROM ownedcars T
WHERE EXISTS (SELECT 1 FROM ownedcars WHERE carname='Ferrari' AND id_owner=T.id_owner)
AND EXISTS (SELECT 1 FROM ownedcars WHERE carname='Mustang' AND id_owner=T.id_owner)
AND EXISTS (SELECT 1 FROM ownedcars WHERE carname='Porsche' AND id_owner=T.id_owner)

最好的问候,

【讨论】:

    【解决方案2】:

    这可以通过group byhaving 完成。

    SELECT id_owner 
    FROM ownedcars 
    WHERE carname in ('Ferrari','Mustang','Porsche')
    GROUP BY id_owner
    HAVING COUNT(DISTINCT carname) = 3
    

    【讨论】:

    • 效果很好。我认为这会更难理解
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多