【发布时间】:2011-07-28 20:20:39
【问题描述】:
我有以下问题
SELECT * FROM (
(SELECT value FROM table_a WHERE link_id = (SELECT id FROM table_b WHERE col_id=1 and somefield='some_text')) as item1,
(SELECT value FROM table_a WHERE link_id = (SELECT id FROM table_c WHERE col_id=7 and somefield='some_other_text')) as item2,
(SELECT value FROM table_a WHERE link_id = (SELECT id FROM table_m WHERE col_id=121 and somefield='more_text')) as item3
)
如果所有内部选择都返回一些东西,一切正常,但是如果一个内部选择没有返回任何东西,那么整个查询不会返回任何东西。
有什么我可以添加到查询中的,这样如果一个内部选择没有返回一些东西,那么在它的位置返回一个空字符串?
例如,第一个查询可能会返回 value = 'returning value a',第二个可能会返回 'value b',然后第三个会返回 '',即一个空字符串,因为没有找到任何行。这将返回一个包含 3 列的结果集 -
'returning value a' ,'value b',''
这个查询的重点是我想要一个从多个不同表返回值的结果集。这些内部选择是根据参数从 php 动态创建的,因此它们可以是任意数量的不同选项。
如果可以更好地编写查询,我很乐意更改它,只要我得到一个包含每个内部选择的值的结果集,或者如果选择没有返回任何内容,则为空字符串
【问题讨论】:
-
您到底想达到什么目的,因为您的查询看起来很混乱!?没有多大意义,你已经知道id,来自
table_b,你为什么又要从那里获取记录? -
然后为我们提供一个完整详细的点查询,以便我们可以了解您到底想要实现什么,并可能提供更好的方法来实现它。或者只是想出你想要的。您提供的查询没有多大意义,因为它可以用更简单的查询来完成。
-
我已经重写了这个问题,希望这能更好地解释这个问题
-
不过,您的问题并没有提供足够的代码让我们了解您想去哪里。您的查询还没有意义。你知道
id,但是,你继续从另一个表中获取它。请提供来自您的应用程序的查询示例,但表名和列已更改,以致晦涩难懂。 -
上面的查询是我正在运行的查询,其中包含表名和列更改。虽然我做了另一个修改,因为我不知道 id,但 where 子句应该是 col_id,我现在已经更改了。我想要的只是返回单行,其中来自内部选择的每个值都放在自己的列中,除非没有返回值,在这种情况下我只想要列中的空字符串。因此,例如,如果有 4 个内部选择,则将返回一行,其中有 4 列,每列都有一个值。如果有 10 个内部选择,则会有 10 个列,每个列都有一个值。
标签: mysql