0

给定 3 个表 A、B 和 C,每个表都有一个 id 列,该列在三个表中必须是唯一的。我该如何做一个查询来做到这一点?现在我正在使用左连接并查找计数,但它不起作用,因为这个特定的 id 可能只存在于三个表中的一个中

SELECT COUNT(*) as unique_id FROM A
        LEFT JOIN B on B.id= A.id
        LEFT JOIN Con B.id= C.id
 WHERE A.id='{$id}'
    OR B.id='{$id}'
    OR C.id='{$id}'

我试图找出这个 $id 在三个表中是否唯一。

4

2 回答 2

1

您可以执行以下操作

SELECT 
(
   (SELECT COUNT(*) FROM A WHERE id = 3)
 + (SELECT COUNT(*) FROM B WHERE id = 3)
 + (SELECT COUNT(*) FROM C WHERE id = 3)
) unique_count

这是SQLFiddle演示

现在,与其手动查找重复项和分配 id,不如考虑通过使用单独的表进行排序auto_increment和简单的触发器,使它们在表中唯一。

您的数据库架构可能看起来像

CREATE TABLE id_seq (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE A (id INT NOT NULL);
CREATE TABLE B (id INT NOT NULL);
CREATE TABLE C (id INT NOT NULL);

触发器

DELIMITER $$
CREATE TRIGGER tg_a_insert
BEFORE INSERT ON a
FOR EACH ROW
BEGIN
  INSERT INTO id_seq VALUES (NULL);
  SET NEW.id = LAST_INSERT_ID();
END$$
DELIMITER ;

它们对于所有表都是相同的。只需更改触发器和表的名称

现在你可以INSERT到任何一张桌子,比如

INSERT INTO A (id) VALUES (0);
INSERT INTO B (id) VALUES (0);
INSERT INTO C (id) VALUES (0);

你会得到

表 A
| 身份证 |
------
| 1 |

表 B
| 身份证 |
------
| 2 |

表 C
| 身份证 |
------
| 3 |

这是SQLFiddle演示

于 2013-06-10T05:39:41.900 回答
1

由于 MySQL 没有 FULL OUTER JOIN,因此您必须使用 UNION。

SELECT COUNT(*) as unique_id
FROM (SELECT id FROM A WHERE id = '$id'
      UNION ALL
      SELECT id FROM B WHERE id = '$id'
      UNION ALL
      SELECT id FROM C WHERE id = '$id') x
于 2013-06-10T05:25:07.007 回答