如何通过不同 table 的特定查询列的值获取 table 中的特定行?

How can I get specific rows in a table by the value of a specific queried column of a different table?

我有 Table1Table2 表格。 Table1B(主键)和 IC 列。 Table2CCSCIC 列:

TableTable1

... B 集成电路 ...
... B1 IC1 ...

Table Table2

... CC SC 集成电路 ...
... 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 值相同的行,我想按特定 CC2 过滤找到的行] 和 SC1 值。因此,在这种情况下,所需的结果是 Table2.
  4. 的第三行

他们告诉我尽可能使用视图。我知道我不能将输入传递给视图;而且,我不想使用存储过程。如何创建视图以获取所有 IC 值从 Table1IC 列获得的行,并按特定 [=18 过滤这些行=] 和 SC 值?也许我需要改用子查询?我需要使用联接吗?感谢您的帮助。

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

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

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

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

您可以使用 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'

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