我很难弄清楚如何编写查询来选择我需要的数据。
所以问题是:我有一张表和另外三张带有外键的表。我需要从第一个表中选择所有字段,从其他三个表中选出一个作为别名,基于哪个字段不为空。在大多数情况下,三个表中的两个表对于指定的列将具有null值,但如果有两个非null值,我想首先选择它们。
也许我没有很好地解释,但我会尝试用examle。假设我有这个主表
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);
这可能发生吗?:)
最简单的方法是更改数据库结构:
Table_1
TableOneID int(11),
SomeOtherData text
Table_X
ID int(11),
TableOneID int(11),
TableTwoValue varchar(250),
number int(11)
在数字中输入表格编号(1,2,3等)然后查询变得更加容易。
我想我找到了解决方案。
我必须使用COALESCE
SELECT COALESCE(TableTwoValue, TableThreeValue, TableFourValue)
AS ExtraField FROM ...