我有两张桌子,如图所示:
cat_id | cat_name
1 | free
2 | semi-paid
3 | premium
payment_id | user_id | cat_id
1 | 1 | 1
2 | 1 | 4
我想查询如下结果
payment_id | user_id | cat_name
1 | 1 | free
null | 1 | semi-paid
null | 1 | premium
2 | 1 | null
如果付款id为空,我将在配置文件页的用户界面中不显示付款图标。这意味着用户id=1没有使用任何来自半付费和付费类别的内容。
我试过了
SELECT payment_id, user_id, cat_name
FROM payment
FULL JOIN category
ON payment.cat_id
WHERE user_id = 1
但是我有一张笛卡尔桌子:(你能帮我吗?
最佳答案
SELECT c.*, p.*, payment_id, user_id, cat_name
FROM category c
LEFT JOIN payment p
ON c.cat_id = p.cat_id
AND p.user_id = 1
UNION
SELECT c.*, p.*, payment_id, user_id, cat_name
FROM category c
RIGHT JOIN payment p
ON c.cat_id = p.cat_id
AND p.user_id = 1
输出集中在最后3列
| cat_id | cat_name | payment_id | user_id | cat_id | payment_id | user_id | cat_name |
|--------|-----------|------------|---------|--------|------------|---------|-----------|
| (null) | (null) | 2 | 1 | 4 | 2 | 1 | (null) |
| 1 | free | 1 | 1 | 1 | 1 | 1 | free |
| 2 | semi-paid | (null) | (null) | (null) | (null) | (null) | semi-paid |
| 3 | premium | (null) | (null) | (null) | (null) | (null) | premium |
关于sql - 完全外部联接或右外部联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47835250/