如何检查引用表是否为空?

时间:2011-10-03 09:59:20

标签: mysql

例如,我有2个表:

CREATE TABLE IF NOT EXISTS master(
    master_id      INT          NOT NULL AUTO_INCREMENT,
    master_name    VARCHAR(15) NOT NULL,
    PRIMARY KEY(master_id)
) TYPE=InnoDB CHARACTER SET=UTF8;

CREATE TABLE IF NOT EXISTS slave(
    slave_id        INT          NOT NULL AUTO_INCREMENT,
    slave_name      VARCHAR(15)  NOT NULL,
    master_id       INT
    PRIMARY KEY (slave_id), 
    FOREIGN KEY (master_id) REFERENCES master(master_id)
) TYPE=InnoDB CHARACTER SET=UTF8; 

如何检查主表是否连接到从表,然后,如果是,我想知道slave是否为空?

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题,但我会尽力回答。如果使用外键引用FOREIGN KEY (master_id) REFERENCES master(master_id)创建了从属表,则主表必须“连接”到从属表。

至于slave表是否为空:如果此查询返回其中包含零的列,则为空:

SELECT COUNT(*) FROM slave

答案 1 :(得分:1)

您可以通过连接来检查两个表是否已连接。

  SELECT COUNT(*) as number_of_connections
  FROM master m
  INNER JOIN slave s ON (s.master_id = m.master_id)
UNION ALL
  SELECT COUNT(*) as rows_in_slave
  FROM slave s2
UNION ALL
  SELECT COUNT(*) as rows_in_master
  FROM master m2

此查询将返回正好3行,它将告诉您连接数,从表是否为空以及主表是否分别为空。