【发布时间】:2015-07-13 00:33:48
【问题描述】:
我有两张桌子。
表 1:
T1id1(pk) col1 col2 col3
表 2:
id(pk) T1id1(FK) col1 col2 col3
我从用户那里得到两个文本,其中 table1.col1 有一些文本(如 %text1%),同样对于 table2 col1,我得到另一个不等于 text1 的文本(如 %text2%)。
我需要从 table1 中获取一组一百条记录,其中 table2 col1 包含 text2 AND Table1 col1 包含 text1。当查询下一组 100 时,我不应该得到第一组 100 中的任何记录。
以下是我编写的示例查询,但它失败了。我正在使用 Apache Phoenix,并且任何 SQL 兼容数据库中的解决方案都可以。
SELECT * FROM table1 WHERE T1id1 IN (select T1id1 from ndm.table1 where
T1id1 NOT IN( select T1id1 from table1 where T1id1 in (select distinct
T1id1(FK) from table2 WHERE table2.col1 like '%text2%' )LIMIT 100) AND T1id1 in (select distinct T1id1(FK) from table2 WHERE
table2.col1 like '%text2%' limit 200) and table1.col1 ilike '%text2%' LIMIT 100);
【问题讨论】:
-
最好包含样本数据和预期输出
-
您可能需要在外部查询中进行排序 - 并从那里继续。如果这对您不起作用,您可能需要考虑(为此特定目的)特定标志。在任何情况下:您能确定不会有任何并发更新,这会在已显示的记录和仍将显示的记录之间移动?