mysql - 根据另一个表中的值在一个表中最多选择 3 个不同的字段?

标签 mysql

我看过很多例子,但似乎没有一个能让我到达我需要的地方。 我想从表 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/

相关文章:

php - WordPress/MySQL 子查询问题

mysql - 如何用随机字符串替换一列所有记录?

php - NodeJS 获取两行不同数据

php - 子查询计算错误?

c++ - MySQL 结果集包含 1 行,但调用 getstring 导致访问冲突

php - 连接多个表并根据第一个表 ID 获取状态

php - 使用 Angular 不工作从本地mysql获取数据

MySQL添加列而不添加任何物理数据/增加存储使用?

php - 使用最近的条目从两个表中输出数据

mysql - 如何更改表以添加自连接关系?