我有一个表 USER ,其中包含以下列
id,name
和另一个表列出,其中包含以下列。
list_id,user_id,type
LISTING表有一个用户的多条记录。我使用php运行以下查询来获取每个用户的列表。
SELECT
USER.ID AS ID,
NAME,
TYPE (TYPE can be A or B)
FROM
USER,
LISTING
WHERE
LISTING.USER_ID = USER.ID
GROUP BY USER.ID
ORDER BY USER.ID DESC
现在,问题是如果USER在LISTING表中有TYPE a和b的条目,我想在报告中显示“BOTH”,如果没有类型b的USER的条目,则只有A,等等。 / p>
请帮助!!
数据:
USER 表
+---+------
|id | name|
+---+------
| 1 | jamy|
| 2 | jazz|
| 3 |leo |
+---+-------
列出表
+---+------------+--------+
| id| user_id |type |
+---+------------+--------+
| 1 | 1 | A |
| 2 | 2 | A |
| 3 | 2 | B |
| 4 | 3 | B |
| 5 | 1 | A |
+---+------------+-------+
现在我想要的报告是:
+---+------------+
|NAME| TYPE |
+---+------------+
|JAMY| ONLY A |
|JAZZ| BOTH |
|LEO | ONLY B |
+---+------------+
答案 0 :(得分:0)
此处case
语句可能非常有用,以及一些正确的join
。
SELECT
USER.ID AS ID,
NAME,
CASE
WHEN X.USER_ID IS NOT NULL AND Y.USER_ID IS NOT NULL THEN 'BOTH'
WHEN X.USER_ID IS NOT NULL THEN 'ONLY A'
WHEN Y.USER_ID IS NOT NULL THEN 'ONLY B'
ELSE 'NEITHER'
END AS TYPE
FROM USER
LEFT JOIN LISTING AS X ON X.USER_ID=USER.ID AND X.TYPE='A'
LEFT JOIN LISTING AS Y ON Y.USER_ID=USER.ID AND Y.TYPE='B'
ORDER BY USER.ID DESC
答案 1 :(得分:0)
您可能需要LEFT JOIN
SELECT
USER.ID AS ID,
NAME,
TYPE
FROM USER LEFT JOIN LISTING
ON LISTING.USER_ID = USER.ID
GROUP BY USER.ID
ORDER BY USER.ID DESC