ms-access - 如何在 Access SQL 中执行 INTERSECT 查询

标签 ms-access intersect

我有这个 Python 片段,用于查询 SQLite 表“note”、“tag”和多对多联接表“fkeys”。我想这很程序化,但它确实有效。现在我想在 Access 中做类似的事情,但 Jet SQL 不支持 INTERSECT 。

几个小时以来,我一直在尝试类似帖子中的代码。 WHERE EXISTSGROUP BY ... HAVING + 子查询的东西都不起作用。 SQL-92 选项也没有帮助。这可以在 Jet SQL 中完成吗?

  db.execute('SELECT DISTINCT n.rowid as rowid, n.note_txt as note_txt,\
  date(n.timestamp) as timestamp\
  FROM note n\
  JOIN fkeys f\
  ON n.rowid = f.note_id\
  JOIN tag t\
  ON t.rowid = f.tag_id\
  WHERE t.tag_text = ?\
INTERSECT  \
  SELECT DISTINCT n.rowid as rowid, n.note_txt as note_txt,\
  date(n.timestamp) as timestamp\
  FROM note n\
  JOIN fkeys f\
  ON n.rowid = f.note_id\
  JOIN tag t\
  ON t.rowid = f.tag_id\
  WHERE t.tag_text = ?\
INTERSECT\
  SELECT DISTINCT n.rowid as rowid, n.note_txt as note_txt,\
  date(n.timestamp) as timestamp\
  FROM note n\
  JOIN fkeys f\
  ON n.rowid = f.note_id\
  JOIN tag t\
  ON t.rowid = f.tag_id\
  WHERE t.tag_text = ?\
  ORDER BY timestamp',[srchtxt0,srchtxt1,srchtxt2])

最佳答案

我相信以下内容应该适用于 ACE/Jet 数据库:

sql = """
SELECT rowid, note_txt, timestamp
FROM [note]
WHERE
    rowid IN
        (
            SELECT f.note_id
            FROM 
                [fkeys] AS f 
                INNER JOIN 
                [tag] AS t 
                    ON t.rowid = f.tag_id 
            WHERE t.tag_text = ?
        )
        AND rowid IN
            (
                SELECT f.note_id
                FROM 
                    [fkeys] AS f 
                    INNER JOIN 
                    [tag] AS t 
                        ON t.rowid = f.tag_id 
                WHERE t.tag_text = ?
            )
        AND rowid IN
            (
                SELECT f.note_id
                FROM 
                    [fkeys] AS f 
                    INNER JOIN 
                    [tag] AS t 
                        ON t.rowid = f.tag_id 
                WHERE t.tag_text = ?
            )
ORDER BY 3 
"""
cursor1 = db.execute(sql,[srchtxt0,srchtxt1,srchtxt2])

关于ms-access - 如何在 Access SQL 中执行 INTERSECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124680/

相关文章:

mysql - 在 MySQL 中选择两个查询与单个映射表的交集

php - 向多维数组添加数据

ms-access - 如何在MS Access中通过VBA填充文本框?

ms-access - 是否可以捕获 "Access is in an inconsistent state"错误?

vba - 将完整的 ADO 记录集插入现有的 ACCESS 表而不使用循环

arrays - Ruby 中的矩形交集

SQL JOIN 同一个表

c# - 使用 MS Access 插入语句 C#

mysql - 从一个查询的结果中查找满足另一要求的行

c# - 光线与 XNA 中的 3D 四边形相交?