交集运算符的奇怪SQL问题



我想做的是:

我有两张桌子,第一张和第二张。我想先按t2_ids和t3_ids列对表中的记录进行分组。然后,先从表中筛选所有记录,再从表中选择记录,其中second.t2_ids包含first.t2_ids,second.t3_ids包含first_t3_ids。

但不知怎么的,我得到了一个错误Query Error: Error: SQLITE_ERROR: no such column: v.t2_ids。你能帮我纠正这个错误吗?我不是SQL专家,所以我可能会错过一些东西。非常感谢!

示例数据库表创建:

CREATE TABLE IF NOT EXISTS `first` (
id INTEGER PRIMARY KEY,
t2_ids TEXT NOT NULL,
t3_ids TEXT NOT NULL
);
INSERT INTO `first` (`id`, `t2_ids`, `t3_ids`) VALUES
('1', '1', '2'),
('2', '1', '3'),
('3', '1', '2'),
('4', '4', '2');

CREATE TABLE IF NOT EXISTS `second` (
id INTEGER PRIMARY KEY,
t2_ids TEXT NOT NULL,
t3_ids TEXT NOT NULL
);
INSERT INTO `second` (`id`, `t2_ids`, `t3_ids`) VALUES
('1', '1', '2'),
('2', '1', '3'),
('3', '1', '2'),
('4', '4', '2');

查询

SELECT v.* 
FROM first AS v 
GROUP BY v.t2_ids, v.t3_ids 
INTERSECT 
SELECT a.* 
FROM second AS a 
WHERE 
(v.t2_ids = (a.t2_ids LIKE "%v.t2_ids%") 
AND 
v.t3_ids = (a.t3_ids LIKE "%v.t3_ids%"))

从示例查询中很难得到您需要的东西。据我所知,您正试图使用LIKE条件来联接表。以下是我做的方法

SELECT v.* 
FROM fst a 
join sec v
on a.t2_ids LIKE '%'||v.t2_ids||'%' 
AND a.t3_ids LIKE '%'||v.t3_ids||'%'

集合运算符(UNION/`INTERSECT'/等(对查询结果进行操作。所使用的每个子查询都需要独立。

问题是这个子查询:

SELECT a.* 
FROM second AS a 
WHERE v.t2_ids = (a.t2_ids LIKE '%v.t2_ids%')  AND 
v.t3_ids = (a.t3_ids LIKE '%v.t3_ids%')

首先,我真的不知道为什么要对LIKE表达式的结果使用=。但第一个错误是没有定义v。我在看FROM条款。它没有定义,所以这是非常清楚的。

最新更新