mysql - SQL - 带有优先级过滤器的 SELECT 查询

标签 mysql sql

我有一个多表查询,看起来像这样:

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/

相关文章:

SQL LIKE 没有返回正确的结果

sql - 多个小删除

php mssql mysql集成错误

mysql - IFNULL 查询

mysql - 在数据库中存储值的问题(cakePHP)

SQL 将列中的多个值连接到一个单元格中

php - 代码正确时在mysql中出现错误

mysql - 大咨询使用时速度慢 "ORDER BY"

MYSQL:无法选择值,尽管我知道它们在那里

c# - Entity Framework 中的大规模增删多对多关系