[英]SQL Join with Multiple Rows of a Single Table + filter by another table
我想寻求帮助。
我的数据库中有这3个表:
表“用户”:
|ID| Name| Surname| Status |
----------------------------------
|14 | Joe| Smith| 1 |
|15 | Paul| Taylor| 1 |
|16 | Martin| List| 1 |
表“ user_data”:
|IDuser| IDciselnik| skUserValue|
--------------------
|14 | 1| value1 text Joe|
|14 | 3| value3 text Joe|
|14 | 4| 25|
|15 | 1| value1 text Paul|
|15 | 3| value3 text Paul|
|15 | 4| 26|
|16 | 1|value1 text Martin|
|16 | 3|value3 text Martin|
|16 | 4| 22|
表“ ciselnik”:
|ID| skTitle|
--------------------
|25 | Kosice|
|26 | Skošicel|
|22 | Prague|
如果我想与所有用户一起获得如下所示的输出:
输出:
|userID | Name | Surname | value_ID1 | value_ID3 |
------------------------------------------------------------------
| 14 | Joe | Smith | value1 text Joe | value3 text Joe |
| 15 | Paul | Taylor | value1 text Paul | value3 text Paul |
| 16 | Martin | List | value1 text Martin | value3 text Martin |
我知道我可以接受:
SELECT us.ID AS userID, us.Name, us.Surname,
max(CASE WHEN ud.IDciselnik =1 THEN ud.skUserValue END) value_ID1,
max(CASE WHEN ud.IDciselnik =3 THEN ud.skUserValue END) value_ID3
FROM user_data ud LEFT JOIN Users us ON us.ID = ud.IDuser
WHERE us.Status=1
GROUP BY us.ID ORDER BY value_ID3 DESC
但是,我有搜索按钮,我只想过滤来自“ kosice”或类似名称的用户。 首先,我需要从存在“ kosice”的表“ ciselnik”中获取所有ID,然后从“ ciselnik”中获取ID,我需要检查/比较哪个用户拥有它,并仅选择skUserValue等于“ ciselnik”的用户
只是在我的输出中,我不需要获得所有用户,但是如输出示例中所示:
|userID | Name | Surname | value_ID1 | value_ID3 | skTitle |
------------------------------------------------------------------
| 14 | Joe | Smith | value1 text Joe | value3 text Joe | Kosice |
| 15 | Paul | Taylor | value1 text Paul | value3 text Paul | Skošicel |
我用这个
SELECT us.ID AS userID, us.Name, us.Surname, c.skTitle,
max(CASE WHEN ud.IDciselnik =1 THEN ud.skUserValue END) value_ID1,
max(CASE WHEN ud.IDciselnik =3 THEN ud.skUserValue END) value_ID3
FROM user_data ud LEFT JOIN Users us ON us.ID = ud.IDuser
LEFT JOIN ciselnik c ON c.ID = ud.skUserValue
WHERE us.Status=1
AND c.skTitle COLLATE utf8_general_ci LIKE '%kosice%'
GROUP BY us.ID ORDER BY value_ID3 DESC
我现在有问题,在我的输出中:value_ID1和value_ID3为NULL谢谢您的帮助
那会是
SELECT u.Name, u.Surname, d1.skUserValue AS value_ID1, d3.skUserValue AS value_ID3
FROM Users u
LEFT JOIN user_data d1 ON u.IDuser = u.ID AND d1.IDciselnik =1
LEFT JOIN user_data d3 ON u.IDuser = u.ID AND d3.IDciselnik =3
LEFT JOIN user_data d4 ON u.IDuser = u.ID AND d4.IDciselnik =4
LEFT JOIN ciselnik c ON d4.skUserValue = c.ID
WHERE c.skTitle LIKE '%blah%'
通过以不同的别名联接数据表,您可以按联接条件中的ID过滤每个子集。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.