0

我很难弄清楚如何编写查询来选择我需要的数据。

所以问题是:我有一张表和另外三张带有外键的表。我需要根据哪个字段不为空来选择第一个表中的所有字段和其他三个表中的一个作为别名。在大多数情况下,三个表中的两个将具有指定列的空值,但如果有两个非空值我想首先找到。

也许我解释得不好,但我会用例子来尝试。假设我有这个主表

Table_1
TableOneID int(11),
SomeOtherData text

Table_2
TableTwoID int(11),
TableOneID int(11),
TableTwoValue varchar(250)

Table_3
TableThreeID int(11),
TableOneID int(11),
TableThreeValue varchar(250)

Table_4
TableFourID int(11),
TableOneID int(11),
TableFourValue varchar(250)

所以我想做类似的事情

SELECT *, (HERE TO SELECT FIRST NON NULL VALUE FROM Table_2(TableTwoValue), 
Table_3(TableThreeValue) or Table_4(TableFourValue)) AS ExtraField FROM Table_1
LEFT JOIN Table_2 USING(TableOneID) ..... LEFT JOIN Table_4 USING(TableOneID);

这有可能发生吗?:)

4

2 回答 2

0

我想我找到了解决方案。

我必须使用 COALESCE

SELECT COALESCE(TableTwoValue, TableThreeValue, TableFourValue) 
AS ExtraField FROM ...
于 2013-07-15T18:30:18.010 回答
0

最简单的方法是更改​​数据库结构:

Table_1
TableOneID int(11),
SomeOtherData text

Table_X
ID int(11),
TableOneID int(11),
TableTwoValue varchar(250),
number int(11)

并且在数字中输入表号(1、2、3 等),然后查询变得更加容易。

于 2013-07-15T17:49:33.307 回答