【问题标题】:SQL: SELECT if entry in one column corresponds to another column of a different tableSQL:如果一列中的条目对应于不同表的另一列,则选择
【发布时间】:2011-10-01 06:48:09
【问题描述】:

我的数据库中有两个表。第一个,[nodeActivity]有以下两列(primary Key = node_name

node_name | last_updated |
          |              |
node 1    |  00:00:00    |
node 2    |  00:00:01    |

第二个名为 [nodes] 的表具有以下列(无主键

node_name |  data   |  time     |
          |         |           | 
node 1    |  data1  |  00:00:01 |    
node 2    |  data2  |  00:00:01 |     
node 1    |  data3  |  00:00:02 |    
node 2    |  data5  |  00:00:02 |    
node 1    |  data6  |  00:00:03 |
node 3    |  data7  |  00:00:03 |      

我只想从 [nodes] 中选择那些在 [nodeActivity] 表中有相应条目的节点和数据。

例如,在上述情况下,我想排除 node3data7,因为 [nodeActivity] 中不存在 node3。 如何以最有效的方式完成上述任务?

【问题讨论】:

  • 如果正如@Scorpi0 所问的那样,这就是你的意思,请解释为什么不允许加入。

标签: sql sql-server database join


【解决方案1】:
SELECT DISTINCT n.node_name, n.data
    FROM nodes n
        INNER JOIN nodeActivity na
            ON n.node_name = na.node_name
                AND na.time = '00:00:00'

【讨论】:

  • @anirudh4444:您可以将DISTINCT 关键字添加到查询中。我会更新答案以反映这一点。
  • @anirudh4444:将其添加为连接的另一个条件。再次,我会更新答案。
【解决方案2】:
select * from nodes where node_name in (select node_name from nodeActivity)

【讨论】:

    【解决方案3】:

    这应该可以工作

    SELECT DISTINCT n.* FROM [nodes] AS n
    INNER JOIN [nodeActivity] AS na
    ON n.node_name = na.node_name
    

    希望这会有所帮助。

    查看新查询以选择非静态行。

    【讨论】:

      【解决方案4】:
      SELECT n.node_name, n.last_updated, na.data, na.time
      FROM [nodes] n
      INNER JOIN [nodeActivity] na ON n.node_name = na.node_name
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-29
        • 1970-01-01
        相关资源
        最近更新 更多