我有一个多表查询,看起来像这样:
SELECT tree.name, tree.type, branch.name, branch.type, leaf.name, leaf.type
FROM tree, branch, leaf
WHERE leaf.branch_id = branch.id
AND branch.tree_id = tree.id
ORDER by field(tree.type, 'Poplar', 'Birch', 'Hazelnut')
所以这给了我属于三个树条目中任何一个的所有叶条目。
现在,我真的只想按指定的顺序返回属于一棵树的叶条目。
因此,如果有属于白杨树的叶子条目,则只显示这些。但是,如果没有 Poplar 叶子条目,则只显示属于 Birch 树的叶子条目。
可以有任意数量的叶子条目。我只想要出现在我的优先列表中的树上的那些。理想情况下只使用一个查询。
有什么想法吗?提前致谢....
最佳答案
试试这个:
SELECT * FROM
(
SELECT tree.name, tree.type, branch.name, branch.type, leaf.name, leaf.type,
IF(@var_type = '' OR a.type = @var_type, a.type := @var_type, 0) AS check_flag
FROM tree, branch, leaf, (SELECT @var_type := '')
WHERE leaf.branch_id = branch.id
AND branch.tree_id = tree.id
ORDER by field(tree.type, 'Poplar', 'Birch', 'Hazelnut')
) a
WHERE check_flag <> 0;
关于mysql - SQL - 带有优先级过滤器的 SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11985300/