SQL内连接问题

时间:2018-03-16 14:08:44

标签: mysql sql select join

好的,我有两个mysql表,第一个是" tbl_forum":

|MSG_ID|MSG_QUERYID|MSG_ISPARENT| MSG_PARENTID
 1     | 59        | 1          | 1
 2     | 59        | 0          | 1

第二个是" tbl_frs":

|FRS_ID|FRS_QUERYID|FRS_PARENTID | FRS_CONTENT
 1     | 59        | 1           | xxxx
 2     | 59        | 1           | yyyy

我想要一个查询,它会产生tbl_forumtbl_frs(加入)msg_queryid = 59msg_isparent = 1的所有行。所以在上面的例子中,我希望得到一行如下所示:

|MSG_ID|MSG_QUERYID|MSG_ISPARENT| MSG_PARENTID | FRS_ID|FRS_QUERYID|FRS_PARENTID | FRS_CONTENT
|1     |59         | 1          | 1            | 1     | 59        | 1           | xxxx

我试过了:

SELECT * from tbl_frs 
JOIN tbl_forum 
  ON msg_queryid=frs_queryid 
WHERE msg_isparent=1 

但它产生了两行......(msg_id 1和2 ......)。我怎样才能解决这个问题?

修改

获胜者是:

 SELECT /column names.../ FROM tbl_frs JOIN tbl_forum ON tbl_frs.FRS_PARENTID=tbl_forum.MSG_ID WHERE tbl_frs.FRS_QUERYID=59 AND tbl_forum.MSG_ISPARENT=1

4 个答案:

答案 0 :(得分:1)

如果我理解,您想从msg_queryid=frs_queryid AND msg_isparent=1的两个表中选择全部,对吧? 顺便说一句,使用*并不是一个好习惯,你应该为你的领域命名!

尝试这个:

SELECT 
    FRS.FRS_ID, FRS.FRS_QUERYID, FRS.FRS_PARENTID, FRS.FRS_CONTENT
    F.MSG_ID, F.MSG_QUERYID, F.MSG_ISPARENT, F.MSG_PARENTID
FROM tbl_frs as FRS
INNER JOIN tbl_forum as F ON F.MSG_QUERYID=FRS.FRS_QUERYID AND F.MSG_ISPARENT=1 

答案 1 :(得分:1)

您应该使用FRS_ID=1 AND MSG_ISPARENT =1设置条件,然后您就会得到期望。

你可以试试这个。

 SELECT 
    T1.MSG_ID,
    T1.MSG_QUERYID,
    T1.MSG_ISPARENT,
    T1.MSG_PARENTID,
    T2.FRS_ID,
    T2.FRS_QUERYID,
    T2.FRS_PARENTID,
    T2.FRS_CONTENT
FROM tbl_frs AS T2 
JOIN tbl_forum AS T1 ON T1.msg_queryid=T2.frs_queryid 
WHERE T2.FRS_ID=1  AND T1.MSG_ISPARENT =1

SQLFiddle

答案 2 :(得分:0)

请尝试以下查询:

SELECT * from tbl_forum JOIN tbl_frs ON msg_queryid = frs_queryid WHERE msg_isparent = 1

谢谢!

答案 3 :(得分:0)

您在问题中提到的查询为您的问题提供了正确答案。

SELECT * FROM tbl_frs JOIN tbl_forum ON msg_queryid = frs_queryid WHERE msg_isparent = 1

在上面的查询中,您告诉MySQL要获取MSG_ISPARENT等于1的所有行。因此,SQL从MSG_QUERYID列(59)中获取值,然后将值与tbl_frs.FRS_QUERYID匹配。

现在FRS_QUERYID中有两行,其值为59。所以MySQL将返回两行。

  

如果添加条件FRS_ID = 1,则无法满足您的要求。小心!!!

因为它不会返回 " tbl_forumtbl_frs的所有行(加入)msg_queryid = 59和{{1} }"

上述查询可为您提供正确的结果。除非你完全理解发生了什么,否则不要改变它。