计算mysql中两个表之间的公共行

时间:2016-12-07 16:56:27

标签: php mysql

所以这是我的问题......

你好在mysql中有两个表,叫做go_H和go_J,两者都是这样的:

go_H

+---------------+------------+
| gene          | GoCode     |
+---------------+------------+
| DNAJC25-GNG10 | GO:0004871 |
| DNAJC25-GNG10 | GO:0005834 |
| DNAJC25-GNG10 | GO:0007186 |
| LOC100509620  | GO:0005215 |
| LOC100509620  | GO:0006810 |
| LOC100509620  | GO:0016021 |
| PPIAL4E       | GO:0000413 |
| PPIAL4E       | GO:0003755 |
| PPIAL4E       | GO:0005737 |
| PPIAL4E       | GO:0006457 |
| LOC105371242  | GO:0000413 |
+----------------------------+

go_J

+------------+
| GoCode     |
+------------+
| GO:0007254 |
| GO:0007256 |
| GO:0007257 |
| GO:0042655 |
| GO:0043506 |
| GO:0043507 |
| GO:0043508 |
| GO:0046328 |
| GO:0046329 |
| GO:0046330 |
+------------+

基本上我想要实现的是看看go_J中GoCode的GoCode值是从Go_H出现在GoCode中的,并计算它们,这样我得到两个表中都存在的总数o GO ID。

我来选择go_H.GoCode和go_J.GoCode,但我不知道如何比较它们以找到公共行然后计算它们......

任何帮助?

4 个答案:

答案 0 :(得分:2)

SELECT COUNT(*) FROM go_H
INNER JOIN go_J USING GoCode

INNER JOIN =>基于连接列(GoCode)

的两个表中的行

替代:

SELECT COUNT(*) FROM go_H h
INNER JOIN go_J ON j.GoCode = h.GoCode

检查此答案以了解联接:

What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?

答案 1 :(得分:1)

希望这有帮助。

select count(*) from go_J j join  go_H h on h.GoCode=j.GoCode;

答案 2 :(得分:1)

查找2 table

之间有多少行相似
Speech

要查找go_H中有多少行不在go_J

SELECT  COUNT(*) totalCount
FROM    go_H a 
        INNER JOIN go_J b
            ON a.GoCode = b.GoCode

要查找go_H中没有多少行go_H

SELECT  COUNT(*) totalCount
FROM    go_H a 
        LEFT JOIN go_J b
            ON a.GoCode = b.GoCode
WHERE   b.GoCode IS NULL

答案 3 :(得分:0)

您可以通过运行类似于此的查询在SQL中实现此目的:

SELECT
 *,
count (GoCode)
 FROM (    
SELECT GoCode FROM go_H
    UNION
    SELECT GoCode FROM go_H )a
group by a.gocode

这将为您提供一个表格,其中包含一列中的每个代码,然后是两个表格中存在的次数

使用PHP的替代方法是使用PDO将两个表都放入数组并使用in_array来检查

<?php
foreach ($go_H as $GoCode) {
    if (in_array($GoCode, $go_J)) {
        // handle codes in both tables
    }
}

这不是最有效的方法,但它会产生结果。