我有以下查询:
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
答案 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;