Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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查询中的左连接还是右连接?_Mysql_Sql_Join_Left Join - Fatal编程技术网

MySQL查询中的左连接还是右连接?

MySQL查询中的左连接还是右连接?,mysql,sql,join,left-join,Mysql,Sql,Join,Left Join,问题1: table1: node fields: nid, ,title,type,created 问题2: mysql_query(SELECT nid,title, type,created FROM `node` where type="provider" ORDER BY created DESC LIMIT 0 , 22) table2: votingapi_vote fields: content_id, value=1 or value=0, value_typ

问题1:

table1: node
fields: nid, ,title,type,created
问题2:

mysql_query(SELECT nid,title, type,created FROM `node` where type="provider"  ORDER BY created DESC LIMIT 0 , 22)



table2:  votingapi_vote
fields:   content_id, value=1 or  value=0, value_type=option
content\u id
value等于
nid
value,但在表1中,
nid
可能与表2没有一一对应关系。例如:

SELECT content_id,
       SUM(CASE WHEN value=1 THEN 1 
                WHEN value=0 THEN -1 
                ELSE 0 
           END) AS ContentSum
    FROM votingapi_vote
    WHERE value_type = 'option'
    GROUP BY content_id
    ORDER BY ContentSum DESC
但是
content\u id
与表1中的
nid
有一对一的对应关系

现在,我想得到一个
标题列表
。哪个编号是
22
降序是根据
ContentSum
创建的
。有办法得到这个吗?我应该使用左连接吗?我不知道如何把两个问题变成一个问题

重新表述它

表1结构{node}:

table 1     table2
nid          content_id

1              1
2              3
3
表二结构{投票}

nid        type             title                 created

10          provider        test one              1298107010
11          provider        test two              1298107555    
12          provider        example one            1300524695 
13          provider        example two            1298081391
14          provider        example three          1298082340
15          company         example four           1298083519
16....      company         example five          1298083559
我想:

获取22个标题列表

content_id      value    value_type

10                1          option
10                 0          option
11                 1          option
12                 0          option
15                 3          percent
15                 2          percent
16.....            0          option
1,
nid
的值等于表2中
content\u id
的值

标题列表队列顺序为

1,首先根据表2
content\u id
递减平铺列表(递减content\u id使用“对于每个content\u id,值为1的行数减去值为0的行数”)

2,因为表2可能少于22条记录,当值为1的行数减去值为0的行数时,表2的值相同。当出现这种情况时。使用表1中创建的
字段来降低
磁贴

左连接
...
test one
test two
example one
example two 
...
这意味着元组不必在表2中有匹配的元素,但表1中的所有元素都将包括在内

<table1> left join <table2>
右连接
这意味着元组不必在表1中有匹配的元素,但表2中的所有元素都将包括在内。

左连接
<table1> left join <table2>
这意味着元组不必在表2中有匹配的元素,但表1中的所有元素都将包括在内

<table1> left join <table2>
右连接

这意味着元组不必在表1中有匹配的元素,但表2中的所有元素都将包括在内。

对于您提供的示例,我不清楚其中的一些。我将结合您提供的两个查询给出一个查询

<table1> left join <table2>
试试这个

<table1> right join <table2>
注意:您可以删除一些不需要的列

其他需要知道的事情:

  • 使用
    LEFT JOIN
    还将创建一行,该行没有与content\u id等价的
    nid
    。这就是为什么我添加了
    v_api.ContentSum
    ,让您看到它将创建一个
    null
  • 如果要在返回值为null时添加值,可以使用
    COALESCE
    。如果不希望包含具有
    v_api.ContentSum
    等于
    null
    的行,则可以使用
    internal JOIN
  • 关于
    右键连接
    根据我的理解,我不确定这是否是您对问题所需要的
再看看这个


我希望这能有所帮助。

对于您提供的示例,我不太清楚其中的一些。我将结合您提供的两个查询给出一个查询

试试这个

<table1> right join <table2>
注意:您可以删除一些不需要的列

其他需要知道的事情:

  • 使用
    LEFT JOIN
    还将创建一行,该行没有与content\u id等价的
    nid
    。这就是为什么我添加了
    v_api.ContentSum
    ,让您看到它将创建一个
    null
  • 如果要在返回值为null时添加值,可以使用
    COALESCE
    。如果不希望包含具有
    v_api.ContentSum
    等于
    null
    的行,则可以使用
    internal JOIN
  • 关于
    右键连接
    根据我的理解,我不确定这是否是您对问题所需要的
再看看这个



我希望这能有所帮助。

如果你能重新表述这个问题,让它更容易阅读,更准确地了解需要什么,那就太好了。对不起,这个问题太难描述了。也就是说。我想要一份标题列表。哪个号码是22。降序是根据表2内容和表1创建的。我同意威尔的观点。提供两个表的DDL、示例数据和查询的预期输出。我已经更新了问题。期待它更清楚。如果你能重新措辞的问题,使它更容易阅读,并准确地看到需要什么,那将是伟大的。对不起,这个问题太难描述。即。我想要一份标题列表。哪个号码是22。降序是根据表2内容和表1创建的。我同意威尔的观点。提供两个表的DDL、示例数据和查询的预期输出。我已经更新了问题。期待的更清楚。谢谢。但我不知道如何编写查询。太复杂了。非常简洁地解释了左右连接的区别。谢谢。但我不知道如何编写查询。它太复杂了。非常简洁地解释了左连接和右连接的区别。很抱歉,它没有输出任何内容。当我删除左连接时。它可以输出一些东西。谢谢,好吗?检查列字段是否正确。在发布之前,我在我的工作台上做了一个测试,我得到了一个结果。你在哪里测试的?你是我的英雄!非常高兴。你帮我解决了一个难题。但是我不知道您的查询的真正含义是什么。这里比较棘手的部分是
左连接
,它只是使用子查询创建一个
虚拟表
。并像使用表格一样使用
v_表格
。我只是使用
虚拟表
,因为我不知道如何调用它:)这是因为它将返回
左表
中的所有行,该表是
节点
,即使它在投票的
右表
上没有匹配项。最好阅读一些关于加入的文档,看看我提供的链接。很抱歉,它是