Левое внешнее соединение + подзапрос с двумя противоположными условиями WHERE - PullRequest
0 голосов
/ 25 марта 2020

В этом запросе я хочу получить данные из 3 таблиц в базе данных MySQL, чтобы отобразить их в виде сетки данных в форме Win c# Моя проблема заключается в том, что я хочу использовать подзапрос в запросе на соединение И этот подзапрос содержит ГДЕ условие, противоположное условию в основном запросе.

следующий код является подзапросом:

    " (SELECT SUM(submittal.priceCurrentWorks) FROM "+database+ "submittal WHERE submittal.addToSummary = 'false') AS 'سعر الحالية'," +
    " (SELECT SUM(submittal.requiredQuantity) FROM " + database + "submittal WHERE submittal.addToSummary = 'false') AS 'الأعمال الحالية'," 

Следующий код является полным запросом (под и основной) :

String LeftOuterQuery = "SELECT DISTINCT boq_table.itemNum AS 'رقم البند', boq_table.descriptionOfWork AS 'وصف البند', boq_table.unit AS 'الوحدة', boq_table.contractualQuantity AS 'كمية العقد', boq_table.priceNum AS 'فئة العقد'," + 
" IFNULL(SUM(summary.priceLastWorks), 0) AS 'سعر السابقة' ," +
" IFNULL(SUM(summary.executedQuantLastSummary), 0) AS 'الأعمال السابقة'," +
" (SELECT SUM(submittal.priceCurrentWorks) FROM "+database+ "submittal WHERE submittal.addToSummary = 'false') AS 'سعر الحالية'," +
" (SELECT SUM(submittal.requiredQuantity) FROM " + database + "submittal WHERE submittal.addToSummary = 'false') AS 'الأعمال الحالية'," +
" IFNULL(summary.percentage,0) AS 'النسبة'," +
" IFNULL(SUM(submittal.requiredQuantity),0) +" +
" IFNULL(SUM(summary.executedQuantLastSummary), 0) AS 'إجمالي الأعمال'," +
" IFNULL(SUM(summary.priceLastWorks), 0) +" +
" IFNULL(SUM(submittal.priceCurrentWorks), 0) AS 'إجمالي السعر'" +
" FROM " + database + "boq_table" +
" LEFT OUTER JOIN " + database + "summary ON " + database + "boq_table.itemNum = " + database + "summary.itemNum" +
" LEFT OUTER JOIN " + database + "submittal ON " + database + "boq_table.itemNum = " + database + "submittal.itemNum" +
" WHERE summary.summaryNumber = '"+lastSummaryNumber+ "' AND submittal.addToSummary = 'true'" +
" GROUP BY boq_table.itemNum"+ 
" ORDER BY boq_table.itemNum ";

Полный запрос возвращает результат, который просто достигает условия Where в полном / основном запросе, который он

" WHERE summary.summaryNumber = '"+lastSummaryNumber+ "' AND submittal.addToSummary = 'true'" 

, и игнорирует условие Where в подзапросах.

Мне нужно отобразить данные, которые достигли addToSummary = 'false' в подзапросе И достичь addToSummary = 'true' в полном / основном запросе одновременно.

1 Ответ

0 голосов
/ 25 марта 2020

Похоже, вам, возможно, просто нужно настроить свой подзапрос, удалив WHERE submittal.addToSummary = 'false'

. Я не вижу другой опции, и вот почему: сначала будет оцениваться предложение WHERE внешнего запроса. Это означает, что все возвращаемые строки должны иметь submittal.addToSummary, равный 'true' . Ваш подзапрос оценивается после этого, поэтому (если я понимаю вашу схему) подзапросы ищут submittal.addToSummary, равный 'false' , где есть только submittal.addToSummary, равный 'true' значений, из-за предложения WHERE внешнего запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...