gpt4 book ai didi

sql - 在 sql in 子句中使用元组

转载 作者:行者123 更新时间:2023-12-04 00:37:08 30 4
gpt4 key购买 nike

给定一个这样的数据库:

BEGIN TRANSACTION;
CREATE TABLE aTable (
a STRING,
b STRING);
INSERT INTO aTable VALUES('one','two');
INSERT INTO aTable VALUES('one','three');
CREATE TABLE anotherTable (
a STRING,
b STRING);
INSERT INTO anotherTable VALUES('one','three');
INSERT INTO anotherTable VALUES('two','three');
COMMIT;

我想做一些类似的事情
SELECT a,b FROM aTable
WHERE (aTable.a,aTable.b) IN
(SELECT anotherTable.a,anotherTable.b FROM anotherTable);

要得到答案“一”,“三”,但我得到“接近”,“:语法错误”

这在任何风格的 SQL 中都是可能的吗? (我正在使用sqlite)

我犯了一个严重的概念错误吗?或者什么?

最佳答案

如果您在 PostgreSQL 或 Oracle 中执行,您的代码就可以工作。在 MS SQL 上,不支持

使用这个:

SELECT a,b FROM aTable
WHERE
-- (aTable.a,aTable.b) IN -- leave this commented, it makes the intent more clear
EXISTS
(
SELECT anotherTable.a,anotherTable.b -- do not remove this too, perfectly fine for self-documenting code, i.e.. tuple presence testing
FROM anotherTable
WHERE anotherTable.a = aTable.a AND anotherTable.b = aTable.b
);

[编辑]

无意图陈述:
SELECT a,b FROM aTable
WHERE
EXISTS
(
SELECT *
FROM anotherTable
WHERE anotherTable.a = aTable.a AND anotherTable.b = aTable.b
);

这有点蹩脚,十多年来,MS SQL 仍然没有一流的元组支持。 IN 元组结构比其类似的 EXISTS 结构更具可读性。顺便说一句,JOIN 也可以(tster 的代码),但是如果您需要更灵活和面向 future 的东西,请使用 EXISTS。

[编辑]

说到 SQLite,我最近正在涉足它。是的,IN 元组不起作用

关于sql - 在 sql in 子句中使用元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1474964/

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