gpt4 book ai didi

mysql - 如何使用 JOIN 左侧的 AND 选择多条记录

转载 作者:行者123 更新时间:2023-11-29 04:12:54 25 4
gpt4 key购买 nike

我有一个简单的需求,但无法正确地获取 SELECT 语句,以便它提供所需的结果。

我有两个表:-

  1. 带有 ID 和其他杂项信息的人员表
  2. 一个许可证表,其中包含要加入的 ID 和每个人的多条记录 (10-15)

我的目标是让所有人都获得蓝牌和白牌(例如)。

使用:

SELECT distinctrow person.ID AS client_ID, postcode, locality 
FROM (person INNER JOIN licences ON person.ID = licences.client_ID)
WHERE licence LIKE '%Blue%' **OR** licence LIKE '%White%'

当然,我会返回那些拥有两者之一的人,而不是两者兼而有之。

使用:

SELECT distinctrow person.ID AS client_ID, postcode, locality 
FROM (person INNER JOIN licences ON person.ID = licences.client_ID)
WHERE licence LIKE '%Blue%' **AND** licence LIKE '%White%'

当然没有返回任何结果(怎么可能呢?)。

这是一个真正简化的示例,因为我在一个嵌套的 JOIN 中将 5 个表拉在一起,所有表都有条件(进入 40 多个 $_GET 变量!)......但这就是我被困的地方。我在 INNER JOIN 中使用了 AND 而不是 WHERE,结果没有任何变化。我喝了很多啤酒,还是没有变化:)

我知道我暴露了我什至缺乏基础知识,但我肯定不需要将 SELECT 放在 SELECT 中?左连接还是右连接?

我觉得我要在这里学到一些基础知识,所以开始吧!

最佳答案

SELECT  *
FROM person p
WHERE (
SELECT COUNT(DISTINCT licence)
FROM licences l
WHERE l.client_id = p.id
AND l.licence IN ('white', 'blue')
) = 2

SELECT  DISTINCT p.*
FROM person p
JOIN licences l
ON l.client_id = p.id
AND l.licence IN ('white', 'blue')
GROUP BY
p.id
HAVING COUNT(DISTINCT licence) = 2

根据数据分布(每个人拥有多少许可证),其中一个查询会更有效率。

关于mysql - 如何使用 JOIN 左侧的 AND 选择多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5514348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com