繁体   English   中英

SQL JOIN查询-链接四个表

[英]SQL JOIN Query - linking four tables

我有SQL可以显示所有活动以及该活动的相对管理员权限(如果有)。

当前的SQL代码:

SELECT `activities`.*, `admins`.`admin_role_id`
FROM (`activities`)
LEFT JOIN `admins` ON `admins`.`activity_id`=`activities`.`id` AND admins.member_id=27500
WHERE `activities`.`active` =  1

返回:

id | 名称| 描述| 活跃 admin_role_id(或null)

然后,我需要检测他们是否是该活动中的活跃成员。

我有以下SQL代码:

SELECT DISTINCT `products`.`activity_ID` as joinedID
FROM (`transactions_items`)
JOIN `transactions` ON `transactions`.`id` = `transactions_items`.`id`
JOIN `products` ON `products`.`id` = `transactions_items`.`product_id`
JOIN `activities` ON `activities`.`id` = `products`.`activity_ID`
WHERE `transactions`.`member_id` =  27500
AND `activities`.`active` =  1

有什么方法可以将其合并为一个SQL查询。 由于JOIN的复杂性,我不知道如何使用正确的JOIN查询。

请帮助,谢谢! :)

这样尝试

SELECT `activities`.*, `admins`.`admin_role_id`
FROM (`activities`)
LEFT JOIN `admins` ON `admins`.`activity_id`=`activities`.`id` AND admins.member_id=27500
    JOIN (`transactions_items`
    JOIN `transactions` ON `transactions`.`id` = `transactions_items`.`id`
    JOIN `products` ON `products`.`id` = `transactions_items`.`product_id`)
ON `activities`.`id`=`products`.`activity_ID`
WHERE `transactions`.`member_id` =  27500
AND `activities`.`active` =  1

在我看来,这样的查询将稍微容易理解,并且(我认为)更加符合规范...

SELECT c.*
     , d.admin_role_id
  FROM activities c
  LEFT 
  JOIN admins d
    ON d.activity_id = c.id 
   AND d.member_id = 27500
  LEFT
  JOIN products p
    ON p.activity_ID = c.id 
  LEFT
  JOIN transactions_items ti
    ON ti.product_id = p.id
  LEFT
  JOIN transactions t
    ON t.id = ti.id
   AND t.member_id =  27500
 WHERE c.active =  1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM