如何为MySQL JOIN创建正确的语句?

时间:2012-04-29 19:09:27

标签: mysql

我有user表,payment是多对多关系表。

SELECT user.uID,
       user.uName,
       user.uLocation,
       user.uBlock,
       user.uRoom,
       user.uStatus,
       payment.pID,
       payment.pDate,
       payment.pType
FROM   user
       INNER JOIN payment
         ON user.uID = payment.pID
LIMIT  0,100  
  1. INNER JOIN结果将无效。
  2. LEFT JOIN 用户显示正确的结果,但在付款
  3. 上返回NULL
  4. RIGHT JOIN 付款显示正确的结果,但在用户
  5. 上返回NULL

    如何显示正确的结果? LEFT JOIN& RIGHT JOIN

2 个答案:

答案 0 :(得分:2)

您想要FULL OUTER JOIN吗?

SELECT user.uID,
       user.uName,
       user.uLocation,
       user.uBlock,
       user.uRoom,
       user.uStatus,
       payment.pID,
       payment.pDate,
       payment.pType
FROM   user
       FULL OUTER JOIN payment
         ON user.uID = payment.pID
LIMIT  0,100
  

全外联接

     

从概念上讲,完全外连接组合了应用左外连接和右外连接的效果。如果FULL OUTER JOINed表中的记录不匹配,则结果集将为每列提供NULL值缺少匹配行的表。对于那些匹配的记录,将在结果集中生成一行(包含从两个表填充的字段)。

Wikipedia


对于MySQL阅读this,您应该使用UNION

答案 1 :(得分:1)

您要求用户ID等于付款ID。你很幸运,如果它返回一个空集,它也可能返回完全错误的数据:)它应该是:

user.uID = payment.uID

payment.userId或其他什么。检查付款表中的列。