我以前从来没有检查过这样的事情,所以我希望你们都能提供帮助。我不确定是否最好创建一个临时表,然后检查项目是否在其中或是否有更好的方法。
表中的每一行代表一个可能有父项的对象。父级存储在同一个表中。在此示例中,parent_id字段包含行的父级的主键。我正在尝试选择表中的所有行,其中type列设置为特定值,其父行在field_b列中具有“z”。括号中的部分显然需要工作......
SELECT s_id, s_text, s_parent_id
FROM sections
WHERE s_derivedtype >= 10000 AND
如果这返回任何内容
SELECT s_id
FROM sections
WHERE s_id = {the s_parent_id from the first query) AND s_flags LIKE '%z%'
我已将此更新为希望更容易阅读...
最有效的方法是什么?我期待在表格中返回18m行的100k行,所以体面的表现并非易事。
答案 0 :(得分:2)
SELECT key_field, field_a
FROM
t s
inner join
t p on p.key_field = s.key_field
WHERE
s.type = 1
AND p.field_b LIKE '%z%'
答案 1 :(得分:1)
试
SELECT t1.key_field, t1.field_a
FROM tbl AS t1
WHERE t1.type = 1 AND parent_id = (SELECT t2.id FROM tbl AS t2
WHERE t2.id = t1.parent_id
AND t2.field_b LIKE '%z%')
或
SELECT t1.key_field, t1.field_a
FROM tbl AS t1
INNER JOIN tbl AS t2 ON t2.id = t1.parent_id
WHERE t1.type = 1
AND t2.field_b LIKE '%z%'