我很难弄清楚如何编写查询来选择我需要的数据。
所以问题在于:我有一个表和另外三个带外键的表。我需要选择第一个表中的所有字段和其他三个表中的一个作为别名,基于哪个字段不为空。在大多数情况下,三个表中的两个表将具有指定列的空值,但如果有两个非空值,我想首先找到它。
也许我说的不好,但我会尝试检查。假设我有这个主表
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);
这可能发生吗? :)
答案 0 :(得分: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等) 然后查询变得更加容易。
答案 1 :(得分:0)
我想我找到了解决方案。
我必须使用COALESCE
SELECT COALESCE(TableTwoValue, TableThreeValue, TableFourValue)
AS ExtraField FROM ...