2010-11-08 2 views
0

Я хочу выполнить запрос соединения SQL. У меня три таблицы _A, _B, _C, скажем. И каждая таблица имеет столбец с именем «уровень» с некоторыми элементами, имеющими значение 1,2,3 в этом столбце.SQL Join Query: проблема с несколькими таблицами

Сначала я просто хотел элемент с уровнем = 1 из таблицы _A, и поэтому писал:

SELECT * FROM _A WHERE level = "1" ORDER BY RANDOM() LIMIT 1 

который работал отлично.

Теперь я хочу выбрать случайный элемент с уровнем = 1 из любой из трех таблиц. я писал:

SELECT * FROM _A, _B, _C WHERE level = "1" ORDER BY RANDOM() LIMIT 1 

Это не сработало. Система разбилась. Но в моем справочнике говорится, что это способ сделать это. Пожалуйста помоги.

ответ

2
SELECT * 
FROM (
    SELECT * FROM _A WHERE level = "1" 
    UNION ALL 
    SELECT * FROM _B WHERE level = "1" 
    UNION ALL 
    SELECT * FROM _C WHERE level = "1" 
) 
ORDER BY RANDOM() LIMIT 1 
+2

+1 Возможно, стоит упомянуть, что наиболее вероятная причина, по которой исходный запрос OP разбился о его системе, заключается в том, что он случайно написал запрос, выполняющий неявные декартовы соединения между тремя разными таблицами. –

+0

@Mark: хорошо, забыл упомянуть, что как только я начал писать запрос ... – RedFilter

0

Я согласен с красным фильтром. Однако зачем вам три таблицы для этого вместо того, чтобы иметь дополнительный столбец в таблице A (ABC char (3))? И тогда каждая строка, которая была бы в таблице _B, имела бы B в этом столбце, и каждая строка, которая была бы в таблице _C, имела бы C в этом столбце. Затем вы можете использовать свой первый оператор выбора без изменений.

+0

Таблицы должны быть разделены, потому что они используются для различных запросов. И они статичны, без обновления (theyre на Android-устройстве), и для добавления значений потребуется несколько часов времени, которых у меня нет. – 2010-11-08 15:38:48