如何在某些条件下连接两个表

时间:2013-12-08 22:03:42

标签: sql join

Table1colA中的6000行数字和colB中的W或A,这很有效

SELECT count(*) 
FROM Table1
WHERE (colA = 1 AND colB = "A");

当我尝试分离表格时(我知道我应该使用JOIN - 但是......) 所以我有 表格1 colA中有6000行数字 表2 colB中有6000行W或A

我认为这是有效的(但内存不足)

SELECT *
FROM Table1, Table2
WHERE (Table1.colA = 1 AND Table2.colB = "A");

我将如何加入这些表来完成这项工作?即使我已经阅读了很多关于这个主题的内容,我似乎也很难理解JOIN

任何非常感谢的帮助

4 个答案:

答案 0 :(得分:0)

希望这会对你有所帮助。

CREATE TABLE Table1
AS SELECT * FROM table_master
WHERE colB = 'A'

SELECT count(*) FROM Table1 WHERE (colA = 1 AND colB = 'A');

CREATE TABLE Table2
AS SELECT * FROM Table_Master
WHERE colB = 'W'

SELECT count(*) FROM Table2 WHERE (colA = 1 AND colB = 'W');

我想,您需要来自这两个表的组合数据(表1和表2)。 所以我们可以使用union来连接表。

Select * From
(
    SELECT * FROM Table1
    union all
    SELECT * FROM Table2
)
WHERE (Table1.colA = 1 AND Table2.colB = 'A');

答案 1 :(得分:0)

试试这个

select * from table1
where cola = 1
union all
select * from table2
where colb = 'A'

如果你想避免重复,你必须使用union而不是union all

答案 2 :(得分:0)

JOIN用于并排附加表格(根据某些条件排列行)。

UNION用于从上到下附加两个表格(将每个表格的结果显示为单独的行)

UNION ALLUNION的工作方式相同,但会从结果中删除两个表之间的重复记录。

虽然不清楚你想要的结果是什么,但听起来更像是你想要UNION

SELECT count(*) 
FROM Table1
WHERE (colA = 1 AND colB = "A");

UNION ALL

SELECT count(*) 
FROM Table2
WHERE (colA = 1 AND (colB = "A" OR colB = "W"));

答案 3 :(得分:0)

当我读到有关JOIN的顿悟时,有人向我展示了一个JOIN是桌子的笛卡尔产品。在您的示例中,在案例1中,您有类似这样的内容:

Table1
colA  |colB
1     |W
2     |W
1     |A
2     |A

从这张表中选择很简单,你设法做得很好。 在两个表的情况下:

Table1      Table2
colA        colB
1           W
2           W
1           A
2           A

JOIN的结果是所有行的乘积,如下所示:

Table1 JOIN Table2
colA        colB
1           W
1           W
1           A
1           A
2           W
2           W
2           A
2           A
1           W
1           W
1           A
1           A
2           W
2           W
2           A
2           A

是的,16行(4x4)这就是为什么在JOIN中你通常倾向于使用ON...子句,以便JOIN仅限于匹配的行。

有了这些知识,如果您想在两种情况下从SELECT COUNT(*)查询中获得相同的结果,则需要限制JOIN。通常,您只需要一个密钥 - 外键关系。