Как проверить, не пуста ли ссылочная таблица?

#mysql

#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; 
  

Как я могу проверить, подключена ли главная таблица к подчиненной таблице, а затем, если это так, я хочу знать, пуста ли подчиненная таблица?

Ответ №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 строки, которые сообщат вам количество подключений, является ли подчиненная таблица пустой и является ли главная таблица пустой соответственно.

Ответ №2:

Я не уверен, что вполне понимаю ваш вопрос, но я постараюсь ответить. Основная таблица должна быть «подключена» к подчиненной таблице, если вы создали подчиненную таблицу со ссылкой на внешний ключ FOREIGN KEY (master_id) REFERENCES master(master_id) .

Что касается того, пуста ли подчиненная таблица: она пуста, если этот запрос возвращает столбец с нулем в нем:

 SELECT COUNT(*) FROM slave