SQL: дважды в одну и ту же колонку для критериев - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть столбец с именем member.id, который присутствует в таблице с именем poster как poster.sender и poster.reciever.

Мне нужен запрос, который выбирает member.value, где member.id является либо poster.sender, либо poster.reciever.

[я знаю, что имена не имеют большого смысла - я не пришелс ними]

Пока у меня есть это, и оно не работает:

SELECT member.value
FROM ((poster INNER JOIN member ON poster.sender = member.ID) 
INNER JOIN poster ON poster.sender= member.id

WHERE (member.id <> ?
AND (((poster.Sender = ?) OR (poster.reciever = ?))AND (poster.Status = 'Accepted'))

Любые идеи будут очень полезны!

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

Тебе захочется что-то подобное ...

select distinct(value)
from
(
(select member.value from member inner join poster on member.id = poster.sender) 
union 
(select member.value from member inner join poster on member.id = poster.receiver) 
) 
0 голосов
/ 25 апреля 2018
SELECT value
       FROM member
       WHERE EXISTS (SELECT *
                            FROM poster
                            WHERE member.id IN (poster.sender,
                                                poster.receiver));

Должно быть эквивалентно N Mason's, но, вероятно, быстрее.По крайней мере, ему не нужно устранять дубликаты для UNION (надеясь, что оптимизатор игнорирует внешний DISTINCT, так как результаты из UNION уже различны и бесполезно делают это снова).Устранение дубликатов может быть дорогостоящим.

0 голосов
/ 24 апреля 2018

Попробуйте:

SELECT 
    member.value
FROM 
    poster s INNER JOIN member ON s.sender = member.ID
INNER JOIN poster r ON r.receiver = member.id
WHERE 
    member.id <> ?
AND 
    (
        s.sender = ? 
    OR r.reciever = ?
    ) 
AND 
    s.status = 'Accepted'

вы не можете использовать таблицу дважды в запросе без псевдонима, следовательно, псевдоним s и r.

Также измените, где условие в соответствии сВаше требование -> status = 'Accepted' из таблицы отправителя или получателя или обоих.

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