Sql 如何将两个子查询相交
您好,我想将两个长查询相互交叉,但我发现您只能将简单查询交叉。有可能得到这样的东西吗Sql 如何将两个子查询相交,sql,sqlite,node-sqlite3,Sql,Sqlite,Node Sqlite3,您好,我想将两个长查询相互交叉,但我发现您只能将简单查询交叉。有可能得到这样的东西吗 `SELECT id, name as antibodyName FROM Antibodies WHERE id IN ((SELECT id FROM Antibodies WHERE name LIKE ? UNION all SELECT antiId FROM Assign
`SELECT id, name as antibodyName FROM Antibodies WHERE
id IN
((SELECT id FROM Antibodies WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedColors WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedReactivities WHERE name LIKE ?)
INTERSECT
(SELECT id FROM Antibodies WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedColors WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedReactivities WHERE name LIKE ?)
)
AND dateOfCreation >= ? AND dateOfCreation <= ?
ORDER BY dateOfCreation DESC LIMIT ? OFFSET ?;`
实际上,我想获得其他查询的联合的交集。必须为每个联合查询组使用SELECT语句:
SELECT id, name as antibodyName
FROM Antibodies
WHERE id IN (
SELECT id FROM
(
SELECT id FROM Antibodies WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedColors WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedReactivities WHERE name LIKE ?
)
INTERSECT
SELECT id FROM
(
SELECT id FROM Antibodies WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedColors WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedReactivities WHERE name LIKE ?
)
) AND dateOfCreation >= ? AND dateOfCreation <= ?
ORDER BY dateOfCreation DESC LIMIT ? OFFSET?;
必须对每个联合查询组使用SELECT语句:
SELECT id, name as antibodyName
FROM Antibodies
WHERE id IN (
SELECT id FROM
(
SELECT id FROM Antibodies WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedColors WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedReactivities WHERE name LIKE ?
)
INTERSECT
SELECT id FROM
(
SELECT id FROM Antibodies WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedColors WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedReactivities WHERE name LIKE ?
)
) AND dateOfCreation >= ? AND dateOfCreation <= ?
ORDER BY dateOfCreation DESC LIMIT ? OFFSET?;
如果我正确理解了你的问题,内部连接将有助于最有效地解决问题。内部插入可以更改为以下代码,外部选择可以保持不变
(SELECT id FROM Antibodies WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedColors WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedReactivities WHERE name LIKE ?) A
JOIN
(SELECT id FROM Antibodies WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedColors WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedReactivities WHERE name LIKE ?) B
ON A.id = B.id
如果我正确理解了你的问题,内部连接将有助于最有效地解决问题。内部插入可以更改为以下代码,外部选择可以保持不变
(SELECT id FROM Antibodies WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedColors WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedReactivities WHERE name LIKE ?) A
JOIN
(SELECT id FROM Antibodies WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedColors WHERE name LIKE ?
UNION all
SELECT antiId FROM AssignedReactivities WHERE name LIKE ?) B
ON A.id = B.id
有没有办法在SQL中进行多词搜索?因为我写这篇文章是为了做2词搜索多词搜索,比如说,如果用户搜索“红色200”,它应该返回颜色为红色,名称为200的抗体,如果用户搜索“红色200蓝色”,它应该返回颜色为红色,名称为20,颜色为蓝色的抗体。我的意思是,我想搜索这些词中的每一个,并找到所有结果的交集。如果您在查询中引用表,可能会有一个更简单的解决方案,但如果没有样本数据和预期结果,我无法确定。因此,在你提供所有这些的地方发布一个问题来澄清你想要什么。好的,谢谢,我在这里提出了一个问题,有没有办法在SQL中进行多词搜索?因为我写这篇文章是为了做2词搜索多词搜索,比如说,如果用户搜索“红色200”,它应该返回颜色为红色,名称为200的抗体,如果用户搜索“红色200蓝色”,它应该返回颜色为红色,名称为20,颜色为蓝色的抗体。我的意思是,我想搜索这些词中的每一个,并找到所有结果的交集。如果您在查询中引用表,可能会有一个更简单的解决方案,但如果没有样本数据和预期结果,我无法确定。所以,在你提供所有信息的地方发布一个问题,以澄清你想要什么。好的,谢谢,我在这里提出了这个问题