Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL内部联接问题_Mysql_Sql_Select_Join - Fatal编程技术网

Mysql SQL内部联接问题

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

好的,我有两个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     |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。