2015-04-06 3 views
0

Я пытаюсь выбрать стоимость по назначению (DEST). Если стоимость не существует для страны, то я должен найти для континента, если стоимость не существует для континента, тогда у меня есть выбор на основе других (пункт назначения).Код ошибки: 1242 Подзапрос возвращает более 1 строки mysql

SELECT SUM(CD.COST+CW.COST) AS TOTAL_COST 
FROM SHIP_COST_BY_DEST CD 
INNER JOIN SHIP_COST_BY_WEIGHT CW 
ON CD.PROD_CODE = CW.PROD_CODE 
WHERE IF((SELECT UPPER(CD.DEST) FROM SHIP_COST_BY_DEST), 
(UPPER(CD.DEST) = UPPER('Others')), 
(IF((SELECT UPPER(CD.DEST) FROM SHIP_COST_BY_DEST 
WHERE UPPER(CD.DEST)=UPPER('India')), 
UPPER(CD.DEST) = UPPER('India'),'Asia'))) 

Может ли один помочь мне

ответ

0

Это ужасно сложный ИНЕКЕ - это будет кошмар для поддержания. Но проблема в том, что один из ваших подзапросов (выбор внутри круглых скобок) возвращает несколько значений, а логика этого не позволяет. Проще всего сделать то, что вам нужно (поскольку у меня нет данных) - запустить каждый из этих подзапросов по отдельности и посмотреть, что возвращает несколько значений, и посмотреть, имеет ли он логически смысл в этом месте.

Например, вы не можете сказать

Name = (SELECT Name FROM AllCustomers) 

, потому что имя не может быть равно все эти имена сразу. Вы можете, однако, сказать

Name IN (SELECT Name FROM AllCustomers) 

потому что это дает вам список возможностей для того, чтобы он был IN. Кроме того, вы должны убедиться, что не только все ваши подзапросы возвращают только один ответ, если это необходимо СЕЙЧАС, но они могут ТОЛЬКО возвращать один ответ, иначе у вас возникнет проблема в производстве, когда данные отличаются от того, что вы проверили.

+0

Большое спасибо, я получил его – Naveen

+0

@Naveen Glad Я мог бы помочь! Пожалуйста, отметьте этот ответ как правильный ответ, чтобы другие люди StackOverflow не стали пытаться ответить на него - спасибо! – CindyH

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