【问题标题】:How can I get specific rows in a table by the value of a specific queried column of a different table?如何通过不同表的特定查询列的值获取表中的特定行?
【发布时间】:2021-10-05 18:53:15
【问题描述】:

我有Table1Table2 表。 Table1 具有 B(主键)和 IC 列。 Table2 具有 CCSCIC 列:

Table1

... B IC ...
... B1 IC1 ...

Table2

... CC SC IC ...
... CC1 SC1 IC1 ...
... CC1 SC2 IC1 ...
... CC2 SC1 IC1 ...
... CC2 SC2 IC1 ...

我想查询Table1,通过B 列的值过滤其行。找到行后(我只找到一个,因为B 是PK),我想使用IC 列的对应值来查询Table2 中与IC 值相同的行从第一步获得的IC 列之一。所以,我想通过特定的 CCSC 值过滤这些行。

以上表述解释了这个概念:

  1. 我在Table1 查询B 值为B1 的行。
  2. 我知道对应的IC 值是IC1
  3. 我在Table2 中查询IC 值与前一个IC1 相同的行,并且我想通过特定的CC2SC1 值过滤找到的行。因此,在这种情况下,所需的结果是 Table2 的第三行。

他们告诉我尽可能使用视图。我知道我不能将输入传递给视图;此外,我不想使用存储过程。如何创建一个视图来获取所有IC 值从Table1IC 列获得的Table2 行,并通过特定的CCSC 值过滤这些行?也许我需要使用子查询?我需要使用联接吗?感谢您的帮助。

【问题讨论】:

  • 听起来您需要一个简单的 inner join,您可以创建一个 view 来执行此操作,然后将您的过滤条件应用于视图 - 从您的描述中并不完全清楚,因此添加所需结果你的问题。
  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。

标签: sql sql-server tsql subquery sql-view


【解决方案1】:

如果我正确理解了你的问题,那么你可以试试这个

SELECT * FROM table2 WHERE IC = (SELECT IC FROM table1 WHERE B='B1')

【讨论】:

    【解决方案2】:

    您可以同时使用联接和子查询,如果您要使用联接,请确保您必须为表定义正确的索引,否则您的查询会很慢。 子查询示例:

    CREATE VIEW [VIEW NAME] AS
    SELECT * FORM Table2 WHERE IC IN (SELECT IC FROM Table1 where B = 'B1')
    

    【讨论】:

    • table1 中B1 对应的IC 值总是有一个。无需使用 in 子句。
    【解决方案3】:

    您可以使用WHERE 过滤主键和IC 列上的(内部)JOINTable2 获取相应的行。由于您只想要它们,我在SELECT 中使用了t2.*。如果您还想要来自Table1 的列,请改用SELECT *

    SELECT t2.* 
    FROM Table1 t1
    JOIN Table2 t2
    ON t1.IC = t2.IC
    WHERE t1.B = 'B1'
    AND t2.CC = 'CC1'
    

    您可以在WHERE 子句中添加任何其他过滤器。

    如果你想把它变成一个视图,只需放

    CREATE VIEW myviewname AS
    

    在上述 SELECT 查询之前,没有您希望能够改变和使用的 WHERE 子句部分,例如

    SELECT * 
    FROM myviewname v
    WHERE v.CC = 'CC1'
    

    在视图上应用该过滤器部分。

    【讨论】:

      猜你喜欢
      • 2019-12-02
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      相关资源
      最近更新 更多