我想做的是:
我有两张桌子,第一张和第二张。我想先按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
条款。它没有定义,所以这是非常清楚的。