繁体   English   中英

将多个mysql查询组合成一个结果

[英]Combining multiple mysql queries into one result

我正在使用php从mysql表获取结果。 我想运行多个条件语句来返回唯一结果列表。 假设我在街上有一张关于房屋的桌子,我的桌子看起来像这样:

House Number | Attribute | Value
-------------------------------
23           | Colour    | White
23           | Stories   | 2
24           | Stories   | 1
25           | Colour    | Blue

请注意房屋号码23出现两次我怎么说一个mysql查询返回所有白色的房子并且有两个故事? 在这种情况下,它只会返回一个结果 - 23。

我听到你在说什么 - 为什么我不把列名作为'颜色'和'故事'。 好吧,原因是因为在我的例子中,房子可以有两种不同的颜色:同一属性名称的两个不同的值。 房子可以有两行,一个属性是颜色,值是白色,另一个属性也是颜色,但值是紫色。 只要房子有一排颜色:白色和一排有故事:2它将在查询中返回正数并包含在结果中

现在,一旦解决方案将运行两个不同的查询:一个查询匹配白宫并返回一个数组,第二个查询匹配带有两个故事的房子并返回一个数组,然后我可以使用PHP来比较两个数组,看看哪些条目出现在两个数组中,将它们拉出并将它们放入最终数组中。 但这涉及调用两个mysql查询。 有没有办法在mysql端组合查询?

你想要一个自我加入:

SELECT
  A.`House Number` AS House
FROM
  Houses AS A
  INNER JOIN Houses AS B ON A.`House Number`=B.`House Number`
WHERE
  A.Attribute='Colour' AND A.Value='White'
  AND B.Attribute='Stories' AND B.Value='2'

您可以像这样嵌套SELECT语句:

SELECT DISTINCT (`House_Number`) AS  `House_Number` 
FROM  `table` 
WHERE  `House_Number` 
IN (
    SELECT DISTINCT (`House_Number`) AS  `House_Number` 
    FROM  `table` 
    WHERE  `Attribute` =  'Colour'
    AND  `Value` =  'White'
)
AND  `Attribute` =  'Stories'
AND  `Value` =  '2';

编辑:不如使用INNER JOIN那么漂亮,但仍然有效。

要在我输入原始响应时发布的@Eugen INNER JOIN方法的基础上,您可以考虑包括DISTINCT ,如下所示:

SELECT DISTINCT(A.`House_Number`) AS  `House_Number`
FROM `table` AS A
INNER JOIN `table` AS B ON A.`House_Number` = B.`House_Number` 
WHERE A.Attribute =  'Colour'
AND A.Value =  'White'
AND B.Attribute =  'Stories'
AND B.Value =  '2'

原因是如果要记录两次相同的属性,请说如下:

House Number | Attribute | Value
-------------------------------
23           | Colour    | White
23           | Colour    | White
23           | Stories   | 2
24           | Stories   | 1
25           | Colour    | Blue 

...然后你最终将两次返回“23”,除非你使用了DISTINCT

试试这个

  select id from table 
    where Attribute='Colour' and Value='White' 
    and id in (select id from table where Attribute='Stories' and Value='2')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM