如何实现单个查询“all,list in list”?

时间:2014-08-04 08:50:21

标签: mysql sql

我需要实现逻辑“除列表外的所有逻辑”,单个查询在所有路径上显示一个小部件,除了列出。 我有下一个查询:

SELECT *
FROM widgets w0_ 
LEFT JOIN widget_route w1_ 
    ON w0_.id = w1_.widget_id 
LEFT JOIN routes r2_ 
    ON w1_.route_id = r2_.id 
WHERE r2_.id IS NULL OR w1_.id = 3

3 是当前路线的ID,我是动态的。但是我需要在widget_route

中列出的路由小部件除外

有表结构:

窗口小部件: id,name,已发布

widget_route: id,widget_id,route_id

路线: id,name,path

有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

这是您选择widgets

中没有任何条目的所有widget_route的方法

通过内部选择:

SELECT
  *
FROM widgets w
WHERE w.id NOT IN (SELECT
                     wr.widget_id
                   FROM widget_route wr);

左连接:

SELECT
  *
FROM widgets w
  LEFT JOIN widget_route wr ON wr.widget_id = w.id
WHERE wr.id IS NULL;

通过widgets选择所有widget_route未与ID为3的路线相关联的方式:

通过内部选择:

SELECT
  *
FROM widgets w
WHERE w.id NOT IN (SELECT
                     wr.widget_id
                   FROM widget_route wr
                   WHERE wr.route_id = 3);

左连接:

SELECT
  *
FROM widgets w
  LEFT JOIN widget_route wr ON wr.widget_id = w.id AND wr.route_id = 3
WHERE wr.id IS NULL;