Произвольная вставка происходит с запросом MySQL Coalesce? - PullRequest
0 голосов
/ 23 января 2012

У меня следующий запрос, и он иногда создает случайную запись уведомления для идентификатора получателя, который не соответствует условиям WHERE запроса.Что не так с частью WHERE моего запроса, которая вызывает случайные вставки?

INSERT INTO
    notification (text,
        type,
        target_id,
        sender_id,
        recipient_id,
        data,
        timestamp,
        is_unread)
    SELECT DISTINCT '$text', 
        'comment', 
        '$id',
        '$senderId',
        COALESCE(comment.author_id, stream.author_id), 
        '$dataArray',
        '$timestamp', 
        '1'
    FROM 
        stream,
        comment 
    WHERE 
         (comment.author_id != '$senderId' AND comment.target_id = '$id')
      OR (stream.author_id != '$senderId' AND stream.id = '$id')

1 Ответ

2 голосов
/ 23 января 2012

У вас нет условий соединения между таблицами stream и comment. Вы эффективно генерируете декартово произведение, поэтому у вас могут быть строки из stream, которые не связаны с comment или наоборот.

Я предлагаю вам использовать синтаксис JOIN и объявить условие для сопоставления строк из двух таблиц.

...