好的,我有两个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_forum
和tbl_frs
(加入)msg_queryid = 59
和msg_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
答案 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
答案 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_forum
和tbl_frs
的所有行(加入)msg_queryid = 59
和{{1} }" 强>
上述查询可为您提供正确的结果。除非你完全理解发生了什么,否则不要改变它。