【问题标题】:PostgreSQL - 2 SELECT Statements from 2 different tables into 2 Columns?PostgreSQL - 从 2 个不同的表到 2 列的 2 个 SELECT 语句?
【发布时间】:2012-03-09 16:15:39
【问题描述】:

我昨天问了一个类似的问题,但输出仍然有一点问题。 Unions 只总是将它组合成一列,并且没有关系来进行连接。这就是我想要的。我不想合并。

SELECT prd_id FROM products WHERE title LIKE %$var%;

AND

SELECT lst_id FROM lists WHERE title LIKE %$var%;

我希望这两个都在一个查询中,并将找到的结果输出到 2 列中,如果其中任何一个都有结果。我也想在最后使用 LIMIT 。

因此,例如,如果两个表都有一个与标题匹配的项目,那么它将返回类似的内容。请注意,这些值将是它在每个表中匹配的任何值。关键是要在 2 列中,而不是像 Unions 输出那样。

+-----------------+  
| prd_id | lst_id |   
+-----------------+   
|  value | value  |   
+-----------------+   

我接近了,但不能完全做到。

为了清楚起见,PHP print_r 输出应该是这样的。这个例子是如果列表中只有2个项目匹配

Array ( [0] => Array ( [lst_id] => 100007 ) [1] => Array ( [lst_id] => 100008 ))

这个例子是如果每个表中的 1 项匹配

Array ( [0] => Array ( [prd_id] => 100006 ) [1] => Array ( [lst_id] => 100008 ))

任何一个表中都可以有任意数量的匹配项。

【问题讨论】:

  • 这不是title上的简单全外连接吗?
  • 嗯,这是一个例子。它是我正在处理的搜索查询的一部分,在 WHERE 之后可能有许多条件,包括匹配每个表中的其他字段。我只是想以此作为我想要完成的事情的例子。
  • 您的查询产生的行数是否相同?
  • 不一定,无论它在表中找到什么,它都会返回。一个表中可能有 10 行匹配,另一个表中匹配 2 行。只取决于查询是否找到任何东西。问题是我需要它为每个表使用特定的 ID 列,这样我就可以使用 PHP 对其进行处理,因此它们不能在同一列中,因为它将为返回的所有值显示相同的键.
  • 那么如果一个表返回 10 行,另一个表返回 2 行,你希望看到返回 12 行还是 10 行?

标签: php sql postgresql


【解决方案1】:

最简单的答案是将结果合并到不同的列中,如下所示:

SELECT prd_id, 0 lst_id FROM products WHERE title LIKE %$var%
UNION ALL
SELECT 0 prd_id, lst_id FROM lists WHERE title LIKE %$var%;

【讨论】:

  • 好吧,我遇到的问题是它会为不匹配的列显示 0。如果没有匹配,它是否可能不显示。你的回答会给我这个Array ( [0] => Array ( [prd_id] => 100452 [lst_id] => 0 ) [1] => Array ( [prd_id] => 0 [lst_id] => 100008 ) [2] => Array ( [prd_id] => 0 [lst_id] => 100007 ) ) 而不是可以通过查询来给我这个Array ( [0] => Array ( [prd_id] => 100452 ) [1] => Array ( [lst_id] => 100008 ) [2] => Array ( [lst_id] => 100007 ) )
  • @Pjack:我不熟悉 PHP,所以我不明白你在问什么。您可以将您想要的结果格式化为查询输出吗?
  • 我在第一篇文章中做过。像这样+-----------------+ | prd_id | lst_id | +-----------------+ | 100452 | 100008 | +-----------------+
  • cmets 的格式不太好。但是在组织帖子的顶部,我有一个表格示例,每行都有单词值。这就是我想要输出的方式,但值不会说值它实际上将具有如果找到匹配项则返回的 id #。否则这些行甚至不会显示。
  • @Pjack:实际值未包含在您的原始问题中,而此评论仅允许每个表中的 1 个值,并且似乎与您之前所说的“@Mark,我想查看所有 12 行”。我建议您编辑您的原始问题以清楚地显示您想要的查询输出,以获得一组样本数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 2022-01-17
  • 2021-08-13
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2017-07-07
相关资源
最近更新 更多