2012-05-31 4 views
0

EDIT:Mysql: тот же запрос, разные результаты

Извините, что не читаемый запрос, я был в крайнем сроке. Мне удалось решить проблему, разбив этот запрос на два меньших и выполнив некоторую бизнес-логику на Java. Все еще хотите знать, почему этот запрос может случайным образом возвращать два разных результата.

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

Пожалуйста, помогите, спросите, требуется ли разъяснение, и заблаговременно благодарим вас.

RESET QUERY CACHE; 

SET SQL_BIG_SELECTS=1; 

set @displayvideoaction_id = 2302; 
set @ticSessionId = 3851; 


select richtext.id,richtextcross.name,richtextcross.updates_demo_field,richtext.content from 
(
select listitemcross.id,name,updates_demo_field,listitem.text_id from 
(
select id,name, updates_demo_field, items_id from 
(
SELECT id, name, answertype_id, updates_demo_field, 
@student:=CASE WHEN @class <> updates_demo_field THEN 0 ELSE @student+1 END AS rn, 
@class:=updates_demo_field AS clset FROM 
(SELECT @student:= -1) s, 
(SELECT @class:= '-1') c, 
(
select id, name, answertype_id, updates_demo_field from 
(
select manytomany.questions_id from 
(
select questiongroup_id from 
(
select questiongroup_id from `ticnotes`.`scriptaction` where [email protected] and questiongroup_id is not null 
) scriptaction 
inner join 
(
select * from `ticnotes`.`questiongroup` 
) questiongroup on scriptaction.questiongroup_id=questiongroup.id 
) scriptgroup 
inner join 
(
select * from `ticnotes`.`questiongroup_question` 
) manytomany on scriptgroup.questiongroup_id=manytomany.questiongroup_id 
) questionrelation 
inner join 
(
select * from `ticnotes`.`question` 
) questiontable on questionrelation.questions_id=questiontable.id 
where updates_demo_field = 'DEMO1' or updates_demo_field = 'DEMO2' 
order by updates_demo_field, id desc 
) t 
having rn=0 
) firstrowofgroup 
inner join 
(
select * from `ticnotes`.`multipleoptionstype_listitem` 
) selectlistanswers on firstrowofgroup.answertype_id=selectlistanswers.multipleoptionstype_id 
) listitemcross 
inner join 
(
select * from `ticnotes`.`listitem` 
) listitem on listitemcross.items_id=listitem.id 
) richtextcross 
inner join 
(
select * from `ticnotes`.`richtext` 
) richtext on richtextcross.text_id=richtext.id; 
+4

Это совершенно нечитаемо. Я даже не могу сказать, есть ли два запроса. Пожалуйста, отформатируйте его лучше. –

+0

Его единственный вопрос, можете ли вы его прочитать сейчас? –

ответ

4

Мое первое впечатление - не используйте короткие сокращения для описания ваших таблиц. Я потерян, на котором td3 есть где, то td6, tdx3 ... Думаю, вы тоже можете быть потеряны. Если вы назовете свои псевдонимы более разумно, у вас будет меньше шансов получить что-то неправильно и смешать 6 с 8 или что-то еще.

Просто :) предложение приемлемо

Там нет ограничений на MySql, так что моя ставка будет на ошибки человека - где-то там присоединиться логика терпит неудачу.

Смежные вопросы