Table1
是colA
中的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
任何非常感谢的帮助
答案 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 ALL
与UNION
的工作方式相同,但会从结果中删除两个表之间的重复记录。
虽然不清楚你想要的结果是什么,但听起来更像是你想要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。通常,您只需要一个密钥 - 外键关系。