Mysql SQL内部联接问题
好的,我有两个mysql表,第一个是“Mysql SQL内部联接问题,mysql,sql,select,join,Mysql,Sql,Select,Join,好的,我有两个mysql表,第一个是“tbl_论坛”: 第二个是“tbl\u frs”: 我想要一个查询,该查询将同时生成tbl\u论坛和tbl\u frs(join)的所有行,其中msg\u queryid=59和msg\u isparent=1。在上面的例子中,我想得到一行,如下所示: |MSG_ID|MSG_QUERYID|MSG_ISPARENT| MSG_PARENTID | FRS_ID|FRS_QUERYID|FRS_PARENTID | FRS_CONTENT |1 |5
tbl_论坛
”:
第二个是“tbl\u frs
”:
我想要一个查询,该查询将同时生成tbl\u论坛
和tbl\u frs
(join)的所有行,其中msg\u queryid=59
和msg\u 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
如果我理解,您想从两个表中选择ALL,其中
msg_queryid=frs_queryid和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
如果我理解,您想从两个表中选择ALL,其中
msg_queryid=frs_queryid和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
请尝试以下查询:
SELECT * from tbl_forum JOIN tbl_frs ON msg_queryid = frs_queryid WHERE msg_isparent = 1
谢谢 请尝试以下查询:
SELECT * from tbl_forum JOIN tbl_frs ON msg_queryid = frs_queryid WHERE msg_isparent = 1
谢谢 您应该使用
FRS\u ID=1和MSG\u 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
您应该使用FRS\u ID=1和MSG\u 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
您在问题中提到的问题为您的问题提供了正确答案
SELECT * FROM tbl_frs JOIN tbl_forum ON msg_queryid = frs_queryid WHERE msg_isparent = 1
在上面的查询中,您已经告诉MySQL获取MSG\u ISPARENT
等于1
的所有行。因此,SQL从列MSG_QUERYID
(即59
)中获取值,然后将该值与tbl_frs.frs_QUERYID
匹配
现在,FRS\u QUERYID
中有两行,值为59
。所以MySQL将返回两行
如果您添加条件FRS_ID=1
将不满足您的要求。小心强>
因为它不会返回“tbl_论坛和tbl_frs
(join)的所有行,其中msg_queryid=59
和msg_isparent=1
”
上面的查询提供了正确的结果。除非您完全了解发生了什么,否则不要更改它。您在问题中提到的查询为您的问题提供了正确答案
SELECT * FROM tbl_frs JOIN tbl_forum ON msg_queryid = frs_queryid WHERE msg_isparent = 1
在上面的查询中,您已经告诉MySQL获取MSG\u ISPARENT
等于1
的所有行。因此,SQL从列MSG_QUERYID
(即59
)中获取值,然后将该值与tbl_frs.frs_QUERYID
匹配
现在,FRS\u QUERYID
中有两行,值为59
。所以MySQL将返回两行
如果您添加条件FRS_ID=1
将不满足您的要求。小心强>
因为它不会返回“tbl_论坛和tbl_frs
(join)的所有行,其中msg_queryid=59
和msg_isparent=1
”
上面的查询提供了正确的结果。除非您完全了解发生了什么,否则不要更改它。查看您的两行结果集,并了解您获得它的原因。第一个表中的两条记录都将连接到第二个表中的两条记录,并提供4条记录。然后根据is parent=1进行筛选。由于第一个表中的那一行可以连接到第二个表中的两行,因此将得到两行。如果要删除第一个表中的MSG_ID为2,请在join或where子句中添加MSG_ID=1。提示:切勿使用邪恶选择*
。相反,请始终命名并限定实际要返回的列,例如,SELECT x.msg\u id,y.frs\u id FROM…
SQL查询必须指定要返回的列的确切列表。如果第一个表中有三个匹配项,会发生什么情况?还是没有?如果您需要列灵活性,那么您需要动态SQL。请查看您的两行结果集,并理解为什么会得到它。第一个表中的两条记录都将连接到第二个表中的两条记录,并提供4条记录。然后根据is parent=1进行筛选。由于第一个表中的那一行可以连接到第二个表中的两行,因此将得到两行。如果要删除第一个表中的MSG_ID为2,请在join或where子句中添加MSG_ID=1。提示:切勿使用邪恶选择*
。相反,请始终命名并限定实际要返回的列,例如,SELECT x.msg\u id,y.frs\u id FROM…
SQL查询必须指定要返回的列的确切列表。如果第一个表中有三个匹配项,会发生什么情况?还是没有?如果您需要列灵活性,则需要动态SQL。