SQL WHERE Help: как получить данные из нескольких строк в одном запросе?

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

Я хочу вытащить, скажем, все строки, в которых пользователь имеет цвет = синий и цвет = красный. Мне интересно вытащить эти несколько строк, чтобы определить, какие пользователи ИЗМЕНИЛИ свой цвет с синего на красный или с красного на синий.

Общий запрос, который у меня есть сейчас, таков. Что не так и как я могу это улучшить? Спасибо!

  1. Возвращает ли это нулевые результаты, потому что я прошу, чтобы значение строки имело ОБА синий и красный цвет одновременно? (что невозможно)
  2. другое мое беспокойство заключается в том, что если я использую ИЛИ вместо И, я включу строки для пользователей, которые окрашены в синий или красный цвет, но НЕ меняются между двумя цветами.
SELECT *
FROM Table a
WHERE a.color='blue'
AND a.color='red'

person user3023355    schedule 22.11.2013    source источник
comment
a.color = 'blue' AND a.color = 'red' всегда будет возвращать 0 строк. a.color не может быть одновременно red и blue.   -  person Linger    schedule 23.11.2013
comment
Да, верно, в строке не может быть и того, и другого. Попробуйте использовать ИЛИ вместо И, может быть.   -  person Andrew    schedule 23.11.2013
comment
Чтобы получить какую-либо помощь, вы должны объяснить структуру (схему) таблицы (таблиц).   -  person Hamlet Hakobyan    schedule 23.11.2013
comment
Покажи свою схему. Также исправьте свои теги, это SQL-Sever или MySQL?   -  person OGHaza    schedule 23.11.2013
comment
Есть ли другая таблица для хранения изменений цвета?   -  person Alireza    schedule 29.10.2014


Ответы (2)


Я предполагаю, что userId является идентификатором, который определяет пользователя, вы можете заменить его тем, что у вас есть в таблице. Проблема называется Relational Division. Надеюсь это поможет!

    select * from table where color in ('blue','red') and userId in(select a.userId 
    from Table a
    where a.color in ('blue','red')
    group by a.userid  //whatever defines user uniquely
    having count(distinct a.color)=2)
person Gayathri    schedule 22.11.2013

MySQL не хранит историю так, как вы хотите. Что вам нужно сделать, так это иметь другую таблицу для истории цветов и записей журнала каждый раз, когда пользователь меняет цвета. Я бы опубликовал код со структурой таблицы, но есть так много разных способов, которыми это можно было бы сделать... Таким образом, вопрос без структуры таблицы не получит ответа с предложением структуры таблицы.

person amaster    schedule 22.11.2013
comment
Очень преждевременный ответ, весьма вероятно, что рассматриваемая таблица действительно является таблицей истории (или, по крайней мере, это так же вероятно, как и не является таблицей истории). Если вы просите пользователя опубликовать больше кода, это должен быть комментарий. - person OGHaza; 23.11.2013