如何通过不同 table 的特定查询列的值获取 table 中的特定行?
How can I get specific rows in a table by the value of a specific queried column of a different table?
我有 Table1
和 Table2
表格。 Table1
有 B
(主键)和 IC
列。 Table2
有 CC
、SC
和 IC
列:
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
列中的一个。所以,我想通过特定的 CC
和 SC
值过滤这些行。
以上表示说明了概念:
- 我在
Table1
中查询 B
值为 B1
的行。
- 我得到对应的
IC
值是IC1
.
- 我在
Table2
中查询 IC
值与前一个 IC1
值相同的行,我想按特定 CC2
过滤找到的行] 和 SC1
值。因此,在这种情况下,所需的结果是 Table2
. 的第三行
他们告诉我尽可能使用视图。我知道我不能将输入传递给视图;而且,我不想使用存储过程。如何创建视图以获取所有 IC
值从 Table1
的 IC
列获得的行,并按特定 [=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
列上使用(内部)JOIN
从 Table2
中获取相应的行。因为你只想要它们,所以我在 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'
在视图上应用该过滤器部分。
我有 Table1
和 Table2
表格。 Table1
有 B
(主键)和 IC
列。 Table2
有 CC
、SC
和 IC
列:
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
列中的一个。所以,我想通过特定的 CC
和 SC
值过滤这些行。
以上表示说明了概念:
- 我在
Table1
中查询B
值为B1
的行。 - 我得到对应的
IC
值是IC1
. - 我在
Table2
中查询IC
值与前一个IC1
值相同的行,我想按特定CC2
过滤找到的行] 和SC1
值。因此,在这种情况下,所需的结果是Table2
. 的第三行
他们告诉我尽可能使用视图。我知道我不能将输入传递给视图;而且,我不想使用存储过程。如何创建视图以获取所有 IC
值从 Table1
的 IC
列获得的行,并按特定 [=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
列上使用(内部)JOIN
从 Table2
中获取相应的行。因为你只想要它们,所以我在 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'
在视图上应用该过滤器部分。