MySQL: синтаксис JOIN + выбор внутри selects = ошибка операнда - PullRequest
0 голосов
/ 15 июля 2011

Я боролся с этим запросом некоторое время. Вот оно:

select First10.mal, Last10.family_name,
(select * from gender2
JOIN
(select * from status) as Mix1
JOIN
(select * from age as Mix2 order by rand() limit 10) as Mix3
JOIN
(select incidentid from incidentid2 as Mix4)
as Mix5 where data='mal' and incidentid='6' and status IN ('inj','ali') and age IN ('NULL','0-17') 
order by rand() limit 100)
from ( select fn.mal, @fns := @fns + 1 as Sequence
from ( select mal from fnames where mal IS NOT NULL order by rand() limit 100) fn,
(select @fns := 0 ) vars ) First10
JOIN
( select ln.family_name, @lns := @lns + 1 as Sequence
from ( select family_name from lastnames order by rand() limit 100 ) ln,
(select @lns := 0 ) vars ) Last10
ON First10.Sequence = Last10.Sequence;

Моя цель - вставить в таблицу случайное имя, фамилию, пол, статус, возраст и идентификатор инцидента. Я пробовал много способов переработать этот скрипт, включая разделение операторов выбора, но мне всегда кажется, что я получаю эту ошибку:

ОШИБКА 1241 (21000): операнд должен содержать 1 столбец (столбцы)

Пожалуйста, посоветуйте, ребята, это меня уже давно напрягало ... Возможно, это очень простой ответ, но я просто запутываюсь. Если вам нужны какие-либо разъяснения, просто спросите.

1 Ответ

0 голосов
/ 15 июля 2011

Ну, похоже, после хорошего ночного сна и некоторой помощи от друга, я получил этот запрос работающим.Для тех, кто ищет ответ на подобный вопрос, вот как я заставил это работать:

select mal,family_name,data,age,status,incidentid
from ( select fn.mal, @fns := @fns + 1 as Sequence
from ( select mal from fnames where mal IS NOT NULL order by rand() limit 100) fn,
(select @fns := 0 ) vars ) as FN
INNER JOIN
(select ln.family_name, @lns := @lns + 1 as Sequence
from ( select family_name from lastnames order by rand() limit 100 ) ln,
(select @lns := 0 ) vars ) as LN
INNER JOIN
(select * from gender2) as Mix0
INNER JOIN
(select * from status) as Mix1
INNER JOIN
(select * from age as Mix2 order by rand() limit 3) as Mix3
INNER JOIN
(select incidentid from incidentid2 as Mix4)
as Mix5 where data='mal' and incidentid='6' and status IN ('inj','ali') and age IN ('NULL','0-17') 
order by rand() limit 100;
...