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,颜色为蓝色的抗体。我的意思是,我想搜索这些词中的每一个,并找到所有结果的交集。如果您在查询中引用表,可能会有一个更简单的解决方案,但如果没有样本数据和预期结果,我无法确定。所以,在你提供所有信息的地方发布一个问题,以澄清你想要什么。好的,谢谢,我在这里提出了这个问题