如何进行自我加入

时间:2012-10-25 21:12:49

标签: sql nested

我有下表有3列,这只是一个样本(不是真实的)

Number Decription Value
1 Green 100
1 Yellow 101
1 Blue 102
2 Chair 200
2 Table 101
2 Green 150
3 Car 200
3 plane 205
3 green 105

我的第一个查询是查找包含值“101”的任何记录或行。在这种情况下没有问题我找到2条记录[1,黄色,101]和[2,表格,101]以及所有3号记录其余的都被完全忽略了。现在我需要根据FIRST查询的结果选择其他记录,数字1和2是真实的结果。所以从列[数字]在这种情况下我发现[1和2],我想搜索并添加任何描述的值= [绿色]。仍然忽略[3],它没有[101]值。

我想要显示的理想结果是

[1, yellow, 101] and Green is 100
[2, table, 101] and Green is 150

到目前为止,我一直很头疼,没有好结果。如果有人知道如何制作此案例的脚本,请告诉我。我希望问题很清楚。

P.S表的内容是假的,只是为了得到一个关于什么的印象,以及它是SQL + PHP。

3 个答案:

答案 0 :(得分:2)

试试这个:

select 
  concat('[', concat_ws(', ', s1.number, s1.description, s1.value), '] and ', s2.description, ' is ', s2.value)
from 
  sample s1
inner join 
  sample s2 on s2.number = s1.number
where 
  s1.value = 101 and 
  s2.description = 'Green'

SQL Fiddle Demo

答案 1 :(得分:0)

试试这个。我想这就是你想要做的。

修改。你想要只获得“绿色”吗?

SELECT * from table WHERE table.Number IN (
    SELECT Number FROM table WHERE table.Value = 101
) AND table.Description = "Green";

答案 2 :(得分:0)

我已经看到了很多,但它显示了blanco字段:(但是我今天早上做了很多咖啡以后做了很多测试我认为我想要做的事情并没有让人感觉到。因为如果我找到了根据条件值“101”记录[1,黄色,101],则不可能按照我的意愿添加内容字段[绿色],因为数字[1]匹配[101]和[绿色]。 我尝试了“OR”,但它也找到了记录[3绿色,105]这是不好的,因为3没有[101]数据。我知道这是一个疯狂的谜题。所以现在我想添加另一个表格,其中有一个唯一的1,2和3号,这个数字应该对应于表格样本的第一列,只有样本有1个2'和3个等的副本。如果我这样做那就是可能有一个可行的条件,我可以在一行或列表中显示数据如下==> 1,黄色,101和绿色,100。我讨厌放弃:(

相关问题