MYSQL如果有其他表没有显示第一个表

时间:2018-02-05 19:31:26

标签: mysql

我有2个表,一个是用户表,另一个是userLog表

用户表

+-----+----------+-----------+--------+
| id  | firtname | user_id   | flag   |
+-----+----------+-----------+--------+
|  62 |      aaaa| 477183673 |      1 |
|  63 |     aaaa | 475957614 |      1 |
|  64 |     aaaa | 445874961 |      1 |
|  65 |     aaaa | 143484840 |      1 |
|  66 |     aaaa | 418110881 |      1 |
+-----+----------+-----------+--------+

用户日志表

+-----+-------+-----------+--------+
| id  | su_id | user_id   | action |
+-----+-------+-----------+--------+
|  62 |     3 | 477183673 |      1 |
|  63 |     3 | 475957614 |      1 |
|  64 |     2 | 445874961 |      1 |
|  65 |     1 | 143484840 |      1 |
|  66 |     1 | 418110881 |      1 |
+-----+-------+-----------+--------+

如果我选择su_id = 3然后像这样显示用户表

,我想这样做
+-----+----------+-----------+--------+
| id  | firtname | user_id   | flag   |
+-----+----------+-----------+--------+
|  64 |     aaaa | 445874961 |      1 |
|  65 |     aaaa | 143484840 |      1 |
|  66 |     aaaa | 418110881 |      1 |
+-----+----------+-----------+--------+

如果用户做了任何动作而不是保存userLog之后我想不在第一张桌子上显示选择这个我尝试一些加入但没有工作,

SELECT * 
FROM user u 
INNER JOIN userLog l 
ON u.user_id = l.user_id
WHERE su_id !=3;

在此之后我理解加入不起作用然后我在这里尝试其他方法:)

sqlfiddle

2 个答案:

答案 0 :(得分:1)

您需要更改您的选择以仅选择所需的列:

SELECT u.* FROM user u //instead of SELECT * FROM 
INNER JOIN userLog l 
ON u.user_id = l.user_id
WHERE su_id !=3;

我们没有足够的数据来理解上述原因无法解决的原因,但您可以尝试通过id而不是user_id加入

SELECT u.* FROM user u //instead of SELECT * FROM 
INNER JOIN userLog l 
ON u.id = l.id
WHERE su_id !=3;

您还可以尝试此NOT IN查询

SELECT * FROM user  
where user_id not in 
(select user_id from userLog where su_id = 3 )

这不应该从您的日志表中获取任何重复项。

答案 1 :(得分:0)

  SELECT ID, FIRSTNAME, USER_ID,FLAG 
  FROM USER,USERLOG 
  WHERE USER.user_ID=USERLOG.user_ID AND SU_ID <>3;

或者您可以使用自己的查询尝试:

SELECT ID, FIRSTNAME, USER_ID,FLAG 
FROM user u
INNER JOIN userLog l 
ON u.ID = l.id
WHERE l.su_id <>3;