gpt4 book ai didi

mysql - 使用 where 和语句在 1 列中搜索

转载 作者:行者123 更新时间:2023-11-29 00:21:11 27 4
gpt4 key购买 nike

我正在尝试使用 where 语句在列中进行搜索。所以我的数据库看起来像这样:

CREATE TABLE test
(
zID varchar(20),
tID varchar(30)
);

INSERT INTO test
(zID, tID)
VALUES
('1','1'),
('1','2'),
('2','1'),
('2','2'),
('3','1');

然后我使用下面的SQL语句进行搜索:

SELECT * from test where tID = 1 and tID = 2

所以当我输入这个时,查询应该返回 12 而不是 3 所有这些都是 zID,我曾尝试使用 in,但这会返回所有 zID。这不是我想要的,所以我的问题是如何使用 and 进行搜索?

而是使用 in,这有点像 or

这是一个 fiddle

最佳答案

这样做的技巧是使用 COUNT() 聚合来验证每个 zID 组的 DISTINCT tID 总数是否相等通过 IN() 子句过滤时为 2。

SELECT zID
FROM test
/* Limit rows to tID 1,2
WHERE tID IN (1,2)
GROUP BY zID
/* Verify that the total DISTINCT number of tID
per group of zID is 2, that way you know *both*
values are present.
Substitute the total number of values in the IN() for the comparison
against COUNT() (substitute for 2 here) to do this dynamically
*/
HAVING COUNT(DISTINCT tID) = 2

The updated fiddle

以上仅返回 zID,但可以使用 JOIN 或另一个 IN() 子句将其扩展为返回所有列。

/* Get all columns for the zID returned inside */
SELECT * FROM test WHERE zID IN (
SELECT zID
FROM test
WHERE tID IN (1,2)
GROUP BY zID
HAVING COUNT(DISTINCT tID) = 2
)

或者使用JOIN

SELECT test.*
FROM
test
INNER JOIN (
SELECT zID
FROM test
WHERE tID IN (1,2)
GROUP BY zID
HAVING COUNT(DISTINCT tID) = 2
) tz ON test.zID = tz.zID

关于mysql - 使用 where 和语句在 1 列中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21034414/

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