我有这个 Python 片段,用于查询 SQLite 表“note”、“tag”和多对多联接表“fkeys”。我想这很程序化,但它确实有效。现在我想在 Access 中做类似的事情,但 Jet SQL 不支持 INTERSECT 。
几个小时以来,我一直在尝试类似帖子中的代码。 WHERE EXISTS
或 GROUP 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/