我有用户表。还有三个表:开发人员,经理,测试人员。所有这些表都有一个外键user_id。
我需要找到所有开发人员或经理用户。 sql会是什么样子?
更新:有人既可以是开发人员也可以是经理。
答案 0 :(得分:7)
一种方法是
SELECT u.*, 'Developer'
FROM users u
INNER JOIN developer d ON d.user_id = u.user_id
UNION ALL
SELECT u.*, 'Manager'
FROM users u
INNER JOIN manager m ON m.user_id = u.user_id
答案 1 :(得分:2)
SELECT *
FROM users u
WHERE EXISTS
(
SELECT NULL
FROM developers
WHERE user_id = u.id
UNION ALL
SELECT NULL
FROM managers
WHERE user_id = u.id
)
答案 2 :(得分:1)
SELECT u.*,
CASE d.user_id IS NULL THEN 'N' ELSE 'Y' END is_developer,
CASE m.user_id IS NULL THEN 'N' ELSE 'Y' END is_manager
FROM users u -- all users
LEFT JOIN developers d -- perhaps a developer
ON u.user_id = d.user_id
LEFT JOIN manager m -- perhaps a manager
ON u.user_id = m.user_id
WHERE d.user_id IS NOT NULL -- either a developer
OR m.user_id IS NOT NULL -- or a manager (or both)
答案 3 :(得分:0)
SELECT
user_id
/* ...other desired columns from the user table... */
FROM
user
WHERE
user_id IN (SELECT user_id FROM developer UNION SELECT user_id FROM manager)
这里我使用IN而不是EXISTS,因此只需要查询一次开发人员和经理表。无论如何,优化器可能会这样做,但这使得它显而易见。
此外,此解决方案不会为管理员和开发人员的用户返回重复项。