如何知道一行是否不存在?

时间:2009-04-26 19:36:53

标签: sqlite

我有以下查询:

SELECT rowid FROM table1 ORDER BY RANDOM() LIMIT 1

我还有另一张桌子(桌子3)。在该表中,我有列table1_id和table2_id。 table1_id是table1中一行的链接,table2_id是另一个表中一行的链接。

我希望在我的查询中只获取table3中定义的结果。只有那些在table1_id列中有table1 rowid的人。可能没有任何列引用某个table1 rowid,因此在这种情况下我不想接收它们。

我如何实现这一目标?

更新:我尝试了以下查询,但不起作用:

SELECT rowid FROM table1
WHERE rowid IN (SELECT table1_id FROM table3 WHERE table1_id = table1.rowid)
ORDER BY RANDOM() LIMIT 1

2 个答案:

答案 0 :(得分:1)

SELECT rowid FROM table1
WHERE rowid IN ( SELECT DISTINCT table1_id FROM table3 )
ORDER BY RANDOM() LIMIT 1;

此查询的意思是“随机选择table1中有table3条目的行。

table1中的每一行都等于被选中的可能性DISTINCT),只要它在table3中被引用至少一次。

如果您尝试获得多个结果,则应删除“ORDER BY RANDOM() LIMIT 1”子句。

答案 1 :(得分:1)

假设你想要选择一个rowid,你需要在你感兴趣的表之间JOIN 中选择.SQLite没有没有完整的标准JOIN功能,因此您需要重新处理查询,以便它可以使用LEFT OUTER JOIN

SELECT table1.rowid, table1.other_field
FROM table3
    LEFT OUTER JOIN table1 ON table3.table1_id = table1.rowid
ORDER BY RANDOM()
LIMIT 1;