Mysql запрос вставки только в том случае, если выберите count> n - PullRequest
0 голосов
/ 04 сентября 2018

У меня 2 запроса:

SELECT COUNT(*) FROM a WHERE id = 1
//if row == 1
INSERT INTO a VALUES(fielda) VALUES('value')

Есть ли способ объединить эти два запроса в один? Я пытался с 'IF (count> 0, ..)' и аналогичными, но запрос неверен. Это включает вставку новой записи в таблицу, стараясь не превышать предварительно установленное количество записей для каждого поля. Теоретически это должно быть похоже на INSERT IF ...

Edit:

@ Barmar Я пытался, но, кажется, я не понял, что вы написали (на самом деле я допустил ошибку в запросе), я пытаюсь ответить так:

THE QUERY AFTER YOUR RESPONSE:
INSERT INTO table1 SELECT MAX(id) FROM table1 WHERE field1 = (SELECT id from a WHERE f = field2) HAVING COUNT(*) = 1 (all fields request) VALUES (all values request)

//field1 = id from table2
//field2 = id from another table: associative value

//ORIGINAL QUERY
//FIRST COUNT:
SELECT COUNT(*) from table1 WHERE field1 = (SELECT id FROM table2 WHERE f = field2)
//AFTER THE INSERT:
INSERT INTO table1 (all fields request) VALUES (all values request)

Мне пришел в голову этот пример, который я пытаюсь показать вам:

ИГРОК ТАБЛИЦЫ: поля (ID, TEAMID, ИМЯ) => (id = int, teamid = int, привязанный к команде таблицы, name = varchar)

TABLE TEAM: поля (ID NAME) => (id = int, name = varchar)

Предположим, что игроков в команде максимум 20, поэтому вы ожидаете максимум 20 записей, связанных с таблицей игроков, для одного и того же значения teamid, или, по крайней мере, это то, что мы, люди, думаем, потому что для компьютера также может быть бесконечным. Я искал способ разрешить вставку только в том случае, если на самом деле допустимо вставлять записи, в этом случае условие состоит в том, что в таблице игроков в каждой команде менее 21 записи.

1 Ответ

0 голосов
/ 04 сентября 2018

Вы можете использовать INSERT ... SELECT и поместить условие в запрос SELECT.

INSERT INTO player (teamid, name)
SELECT @teamid, @playername
FROM DUAL
WHERE (SELECT COUNT(*) FROM player
        WHERE teamid = @teamid) < 20

DUAL - это фиктивная таблица, когда вам нужно выбрать литеральные данные, но нужно включить в запрос другие предложения.

...