Как сравнить два запроса, если они влияют на одну строку? - PullRequest
0 голосов
/ 09 марта 2012

Я должен проверить, затрагивают ли два запроса (например, оператор update и delete) одну и ту же строку в базе данных MySQL.

Я думал о выборе затронутых записей запросов с помощью выбора и проверки, если одна и та же строка появляется в обоих запросах:

UPDATE Foo SET col = 'a' WHERE id > 5;
DELETE FROM Foo WHERE col = 'b';

SELECT (SELECT * FROM Foo WHERE col = 'b') IN (SELECT * FROM Foo WHERE id > 5);

На практике это сработало для моей простой таблицы Foo, но не сработало в другой таблице с несколькими столбцами - даже когда два подвыбора были абсолютно одинаковыми. Также с этим решением первый суб-выбор может содержать только один результат.

Кто-нибудь знает другое решение или причину, по которой вышеприведенный выбор может завершиться неудачей с другой таблицей?

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Теперь я частично решил свою проблему с помощью PHP, а не только с MySQL.

Я выбираю соответствующие записи соответствующих запросов и сравниваю результат в моем приложении (в моем случае это реализовано с помощью PHP).).

Почему я не решил ее одним запросом через MySQL?На данный момент, когда я должен сравнивать запросы, я не знаю ничего другого, заданного запросом.Тем не менее, я знаю, на какие таблицы влияют и какие столбцы, но я не знаю, как эти таблицы структурированы или какой столбец является первичным ключом (или если есть даже несколько первичных ключей).Вот почему я, более или менее, написал свою собственную функцию IN на PHP.

Другим способом решения может быть получение первичных ключей из MySQL (например, с использованием DESCRIBE) и использование описанного решения Йоахима Исакссона.

Просто хотел поделиться этим с вами.

0 голосов
/ 09 марта 2012

Чтобы получить строки, на которые будут влиять оба, вам нужны только условия WHERE, просто выполните:

SELECT * FROM Foo WHERE (col='b') AND (id>5);

IN работает только с результатами одного столбца, извините.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...