UNION与带有大WHERE子句的两个查询

大卫·布洛姆斯特伦(David Blomstrom)

我有两个几乎相同的查询-一个连接表gz_life_groups和gz_life_groups2,另一个连接gz_life_floaters和gz_life_floaters2。我想使用UNION将两个查询合并到一个查询中,但是我还没有跳过所有的麻烦。

表格的简要说明:想象一下导航到URL MySite / life / ursus-maritimus。Ursus-maritimus与数据库表字段Taxon中的值匹配。因此,如果已将Ursus maritimus(北极熊)放在名为“ White Mammals”的组中,则它将与表gz_life_groups中标题(“ White Mammals”)和URL(“ white-mammals”)中的值匹配。链接字段仅包含指向相关页面的链接。

查询1

$Groups = $pdo->prepare("SELECT G2.URL, G2.Taxon, G1.URL, G1.Title, G1.Links
 FROM gz_life_groups2 AS G2
 LEFT JOIN gz_life_groups G1 ON G1.URL = G2.URL
 WHERE Taxon = :Kingdom AND G2.Live = '1'
 OR Taxon = :Phylum AND G2.Live = '1'
 OR Taxon = :Class AND G2.Live = '1'
 OR Taxon = :Order AND G2.Live = '1'
 OR Taxon = :Family AND G2.Live = '1'
 OR Taxon = :Genus AND G2.Live = '1'
 OR Taxon = :MyURL AND G2.Live = '1'
 GROUP BY G1.URL
 Order By G2.N");
$Groups->execute(array(
 'Kingdom'=>$Kingdom,
 'Phylum'=>$Phylum,
 'Class'=>$Class,
 'Order'=>$Order,
 'Family'=>$Family,
 'Genus'=>$Genus,
 'MyURL'=>$MyURL
));

查询2

$Names = $pdo->prepare("SELECT F2.URL, F2.Taxon, F1.URL, F1.Name, F1.Parent
 FROM gz_life_floaters2 AS F2
 LEFT JOIN gz_life_floaters F1 ON F1.URL = F2.URL
 WHERE Taxon = :Kingdom AND F2.Live = '1'
 OR Taxon = :Phylum AND F2.Live = '1'
 OR Taxon = :Class AND F2.Live = '1'
 OR Taxon = :Order AND F2.Live = '1'
 OR Taxon = :Family AND F2.Live = '1'
 OR Taxon = :Genus AND F2.Live = '1'
 OR Taxon = :MyURL AND F2.Live = '1'
 GROUP BY F1.URL
 Order By F2.N");
$Names->execute(array(
 'Kingdom'=>$Kingdom,
 'Phylum'=>$Phylum,
 'Class'=>$Class,
 'Order'=>$Order,
 'Family'=>$Family,
 'Genus'=>$Genus,
 'MyURL'=>$MyURL
));

就我对UNION的有限了解带给我的。我不知道如何添加联接或WHERE子句...

$stm = $pdo->prepare("SELECT *
 FROM (
 SELECT G2.URL, G2.Taxon, G1.URL, G1.Title, NULL AS Parent, G1.Links
 FROM gz_life_groups2 AS G2
 UNION ALL 
 SELECT F2.URL, F2.Taxon, F1.URL, F1.Name AS Title, F1.Parent, NULL AS Links
 FROM gz_life_floaters2 AS F2
) AS Combined
 WHERE Combined.URL LIKE :MyURL");
$stm->execute(array(
'MyURL'=>$MyURL
));
泽德福克斯

您可以尝试这样写:

SELECT G2.URL, G2.Taxon, G1.URL, G1.Title, G1.Links
 FROM gz_life_groups2 AS G2
 LEFT JOIN gz_life_groups G1 ON G1.URL = G2.URL
 WHERE Taxon = :Kingdom AND G2.Live = '1'
 OR Taxon = :Phylum AND G2.Live = '1'
 OR Taxon = :Class AND G2.Live = '1'
 OR Taxon = :Order AND G2.Live = '1'
 OR Taxon = :Family AND G2.Live = '1'
 OR Taxon = :Genus AND G2.Live = '1'
 OR Taxon = :MyURL AND G2.Live = '1'
 GROUP BY G1.URL

UNION

SELECT F2.URL, F2.Taxon, F1.URL, F1.Name, F1.Parent
 FROM gz_life_floaters2 AS F2
 LEFT JOIN gz_life_floaters F1 ON F1.URL = F2.URL
 WHERE Taxon = :Kingdom AND F2.Live = '1'
 OR Taxon = :Phylum AND F2.Live = '1'
 OR Taxon = :Class AND F2.Live = '1'
 OR Taxon = :Order AND F2.Live = '1'
 OR Taxon = :Family AND F2.Live = '1'
 OR Taxon = :Genus AND F2.Live = '1'
 OR Taxon = :MyURL AND F2.Live = '1'
 GROUP BY F1.URL

例如,如果:Phylum的第一部分和第二部分的值不同,则将第二UNION个:Phylum命名为:PylumBelowUnion或类似的名称,并传递一个数组,该数组同时包含:Phylum:PhylumBelowUnion的值。

我还建议您将ands和ors一起使用方括号,如下所示:

(Taxon = :Kingdom AND F2.Live = '1') OR
(Taxon = :MyURL AND F2.Live = '1') ...

我假设这就是您想要的。如果不是,请忽略上面的建议。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有两个 where 子句的子查询

来自分类Dev

一个查询中有两个SQL求和,其中包含两个where子句

来自分类Dev

来自带有IN子句的两个表的MySQL查询请求

来自分类Dev

来自带有IN子句的两个表的MySQL查询请求

来自分类Dev

跨两个表和列的带有“IN”子句的 Sql 查询

来自分类Dev

两个表中带有where子句的内部联接的Postgres索引

来自分类Dev

在两个表上都带有where子句的Rails LEFT OUTER JOIN

来自分类Dev

合并来自同一表但具有不同WHERE子句的两个SELECT查询

来自分类Dev

在同一表上具有不同where子句的两个选择查询

来自分类Dev

合并来自同一表但具有不同WHERE子句的两个SELECT查询

来自分类Dev

如何组合具有不同 set 和 where 子句的两个更新查询?

来自分类Dev

具有不同 where 子句的两个 SQL Server 查询

来自分类Dev

两个带有相同except子句的try语句

来自分类Dev

插入带有两个max子句的语句

来自分类Dev

具有两个like子句的SQL查询

来自分类Dev

具有两个where子句的Haskell方法

来自分类Dev

具有相同WHERE子句的同一个表上的两个不同查询

来自分类Dev

使用UNION ALL子句将两个单独的查询汇总为一个值

来自分类Dev

没有子查询,带有一个表的两个“ where”语句不起作用

来自分类Dev

带有两个子查询的Postgresql查询给出错误:缺少FROM子句?

来自分类Dev

当使用两个WHERE子句限制查询时,PHP查询显示不带日期的行

来自分类Dev

使用两个不同的where子句

来自分类Dev

LINQ的两个Where子句

来自分类Dev

合并两个 sql 查询,每个查询都有一个 with 子句

来自分类Dev

SQL查询使用同一个表比较两个WHERE子句

来自分类Dev

蜂巢中带有参数的两个查询

来自分类Dev

蜂巢中带有参数的两个查询

来自分类Dev

带有Active Record Rails 4的两个查询

来自分类Dev

带有两个链接表的 SQL 查询

Related 相关文章

  1. 1

    带有两个 where 子句的子查询

  2. 2

    一个查询中有两个SQL求和,其中包含两个where子句

  3. 3

    来自带有IN子句的两个表的MySQL查询请求

  4. 4

    来自带有IN子句的两个表的MySQL查询请求

  5. 5

    跨两个表和列的带有“IN”子句的 Sql 查询

  6. 6

    两个表中带有where子句的内部联接的Postgres索引

  7. 7

    在两个表上都带有where子句的Rails LEFT OUTER JOIN

  8. 8

    合并来自同一表但具有不同WHERE子句的两个SELECT查询

  9. 9

    在同一表上具有不同where子句的两个选择查询

  10. 10

    合并来自同一表但具有不同WHERE子句的两个SELECT查询

  11. 11

    如何组合具有不同 set 和 where 子句的两个更新查询?

  12. 12

    具有不同 where 子句的两个 SQL Server 查询

  13. 13

    两个带有相同except子句的try语句

  14. 14

    插入带有两个max子句的语句

  15. 15

    具有两个like子句的SQL查询

  16. 16

    具有两个where子句的Haskell方法

  17. 17

    具有相同WHERE子句的同一个表上的两个不同查询

  18. 18

    使用UNION ALL子句将两个单独的查询汇总为一个值

  19. 19

    没有子查询,带有一个表的两个“ where”语句不起作用

  20. 20

    带有两个子查询的Postgresql查询给出错误:缺少FROM子句?

  21. 21

    当使用两个WHERE子句限制查询时,PHP查询显示不带日期的行

  22. 22

    使用两个不同的where子句

  23. 23

    LINQ的两个Where子句

  24. 24

    合并两个 sql 查询,每个查询都有一个 with 子句

  25. 25

    SQL查询使用同一个表比较两个WHERE子句

  26. 26

    蜂巢中带有参数的两个查询

  27. 27

    蜂巢中带有参数的两个查询

  28. 28

    带有Active Record Rails 4的两个查询

  29. 29

    带有两个链接表的 SQL 查询

热门标签

归档