【问题标题】:sql - find value from a column to find all other values from another columnsql - 从列中查找值以从另一列中查找所有其他值
【发布时间】:2013-02-28 16:32:31
【问题描述】:

这是一个SQL问题,我会尽力解释。

我有一张如下表

id  name    accounts
1   Jim 7001
1   Jim 7002
1   Jim 7003
2   Ryan    7001
3   Todd    7001
3   Todd    7003
2   Ryan    7002
4   Cam 7001
5   Fran    7001
2   Ryan    7003
1   Jim 7004

我首先尝试查找帐户列为“7001”的所有值,以找到正确的 ID。之后,我只需要提取带有这些 id 的行,这样我就可以看到这些特定 id 的所有帐户。

我正在使用的示例代码

select 
s.id,
s.name,
s.account

from 
students s

where
s.account in ('7001','7002','7003','7004')

我可以通过 2 个查询来做到这一点,其中一个是查找具有 '7001' 帐户值的 ID,然后只针对 id 运行另一个查询,但我想知道是否有办法编写以便一次性计算所有内容.

提前致谢!

【问题讨论】:

    标签: sql if-statement case


    【解决方案1】:
    SELECT  *
    FROM    tableName
    WHERE   ID IN 
            (
                SELECT ID 
                FROM   tableName
                WHERE  accounts = 7001
            )
    

    JOIN 版本(推荐

    SELECT  a.*
    FROM    students a
            INNER JOIN students b
              ON a.ID = b.ID
    WHERE   b.accounts = 7001
    

    【讨论】:

    • 这里也可以使用group by吗?
    • @AshReva 你想聚合一些字段吗?
    • @AshReva 请澄清您到底需要什么
    • 不,我只是想我们是否也可以使用 group by。没关系。打扰了
    • @AshReva 问:D没有问题。 GROUP BY 子句可以用于当你想使用聚合函数聚合一些文件时使用 SUM(), MAX(), MIN(), etc...
    【解决方案2】:
    select t2.*
    from tbl t1, tbl t2
    where t1.accounts = '7001'
    and t1.id = t2.id
    

    【讨论】:

    • 如果accounts 是整数删除引号
    【解决方案3】:

    此方案已优化:

    SELECT  a.*
    FROM    tableName as a
    INNER JOIN tableName as b
        ON a.id = b.id
        AND b.accounts = 7001
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多