2014-09-09 2 views
0

Если я удалю ORDER BY c.campaign_id ASC из-за инструкции, он отлично работает, но теперь он меня бросает Sub query return more than 1 row.что я делаю неправильно этот SQL-запрос?

SELECT SQL_CALC_FOUND_ROWS c.campaign_id, 
    c.title as campaign_title, 
    IFNULL((SELECT meta_value 
      FROM campaign_meta as cm 
      WHERE cm.campaign_id = c.campaign_id 
      AND cm.meta_key = 'total_viewed'), 0) AS total_viewed, 
    c.campaign_identifier, 
    c.added_datetime, 
    l.label_id, 
    l.title AS label_title, 
    l.color, 
    u.username 
FROM campaigns AS c 
LEFT JOIN users AS u ON u.user_id = c.author 
LEFT JOIN campaign_relation AS cr ON c.campaign_id = cr.campaign_id 
LEFT JOIN labels AS l ON l.label_id = cr.label_id 
ORDER BY c.campaign_id ASC 
LIMIT 0, 10 
+0

вопрос не ясно .. –

ответ

2

ваш суб-запрос возвращает более одной строки, как результат

(SELECT meta_value FROM campaign_meta as cm WHERE cm.campaign_id = c.campaign_id AND 
cm.meta_key = 'total_viewed') 

Где мы должны изменить свой запрос использовать sytax:

SELECT ... LIMIT 1 

Обновление это для MySQL

(SELECT meta_value FROM campaign_meta as cm WHERE cm.campaign_id = c.campaign_id AND 
    cm.meta_key = 'total_viewed' LIMIT 1) 

или переписать запрос


из интереса к синтаксису MS SQL

(SELECT TOP 1 meta_value FROM campaign_meta as cm WHERE cm.campaign_id = c.campaign_id AND 
cm.meta_key = 'total_viewed') 
+0

AFAIK, 'ВЫБРАТЬ TOP 1' не существует в MySQL. Вместо этого попробуйте «LIMIT 1». –

+0

Для mysql используйте 'LIMIT' –

+0

@ X.L.Ant хорошая точка – cpoDesign

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