我看过很多例子,但似乎没有一个能让我到达我需要的地方。 我想从表 A 中选择 1 个字段,然后检查表 B 中的值,如果该值为 true( bool 值),则还要从表 A 中选择字段 2 和 3 以返回所有 3 个字段。因此,如果 B 的值为 false,则仅从表 A 中选择 1 个字段,如果为 true,则选择所有 3 个字段。
最佳答案
Select Field1
, Case
When Exists (
Select 1
From TableB
Where SomeField = 1
And ...
) Then TableA.Field2
Else Null
End As Field2
, Case
When Exists (
Select 1
From TableB
Where SomeField = 1
And ...
) Then TableA.Field3
Else Null
End As Field3
From TableA
<小时/>
更新
如果您每次想要的是三列结果,即使其中一些列为空,上述解决方案也可以正常工作。但是,如果您想要的是根据查询返回不同数量的列,那么这是无法在单个查询中完成的。 SQL 语言不适合处理动态模式生成。我的建议首先是评估为什么您希望同一查询具有不同数量的列,并确定您是否无法简单地处理中间层中第 2 或第 3 列为 NULL 的情况。这是迄今为止最简单的解决方案,可以在单个查询中完成:
Select TableA.Field1, TableA.Field2, TableA.Field3
, (
Select TableB.SomeBooleanColumn
From TableB
) As TableBValue
From TableA
然后,您的中间层代码将确定是否对 Field2 和 Field3 执行某些操作。
也就是说,如果您坚持使用两个列结构,则需要两个查询:
Select TableA.Field1
From TableA
Where Exists (
Select 1
From TableB
Where TableB.SomeColumn = 0
)
调用此查询后,您将评估是否获得了一行。如果没有行,则可以调用此查询:
Select TableA.Field1, TableA.Field2, TableA.Field3
From TableA
Where Exists (
Select 1
From TableB
Where TableB.SomeColumn = 1
)
OP中没有说明的是TableB中没有行的情况。
关于mysql - 根据另一个表中的值在一个表中最多选择 3 个不同的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8145348/