Mysql Query дает дубликаты строк - PullRequest
0 голосов
/ 08 декабря 2018
SELECT 
        tc.expense AS Expense
        ,tc.`tour_sub_code`
        ,tc.login_id
        ,tc.currency
        ,tc.amount
        ,tc.date
        ,tc.from_date
        ,tc.to_date
        ,tc1.NoOfDays
        ,tc1.NoOfDays*tc.amount totalAmount

        FROM tc_wallet tc ,

       (SELECT 
        DATEDIFF(
          STR_TO_DATE(to_date, '%Y-%m-%d'),
          STR_TO_DATE(From_date, '%Y-%m-%d')
        ) NoOfDays 
      FROM
        tc_wallet 
      WHERE expense = 'DAILY ALLOWANCE' 
        AND login_id = 'sunny.thangaraj') AS tc1 

        WHERE tc.login_id = 'sunny.thangaraj'
        AND tc.expense = 'DAILY ALLOWANCE'       

В приведенном выше запросе я выбираю данные из одной и той же таблицы дважды
1) Данные отдельных столбцов
2) DateDiff между столбцами одной и той же таблицы и использую их для расчета общей суммы

но он дает мне вывод дважды,

ВЫХОД

DAILY ALLOWANCE TCEB161017  sunny.thangaraj USD 50  12-02-2018  2018-12-08  2018-12-10  2   100
DAILY ALLOWANCE TCEB161017  sunny.thangaraj USD 50  12-02-2018  2018-12-08  2018-12-10  2   100
DAILY ALLOWANCE TCEB010915  sunny.thangaraj USD 2   17-01-2014  2018-12-08  2018-12-10  2   4
DAILY ALLOWANCE TCEB010915  sunny.thangaraj USD 2   17-01-2014  2018-12-08  2018-12-10  2   4

Как и TOURSUBCODE TCEB010915, TCEB161017 приходит 2 раза, что является одинаковым и нежелательным.
Можеткто-нибудь скажет мне, что я не так делаю здесь?
Это потому, что я делаю Выберите из A, (выберите из A)

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Самый простой способ удалить дубликаты - это использовать SELECT DISTINCT вместо SELECT.

Однако вы можете попытаться улучшить логику запроса.Здесь я не вижу веских оснований для использования подзапроса, il будет просто замечательно выбрать только один раз, как показано ниже:

SELECT 
    tc.expense AS Expense
    ,tc.`tour_sub_code`
    ,tc.login_id
    ,tc.currency
    ,tc.amount
    ,tc.date
    ,tc.from_date
    ,tc.to_date
    ,DATEDIFF(
      STR_TO_DATE(tc,to_date, '%Y-%m-%d'),
      STR_TO_DATE(tc.From_date, '%Y-%m-%d') NoOfDays
    ,DATEDIFF(
      STR_TO_DATE(tc.to_date, '%Y-%m-%d'),
      STR_TO_DATE(tc.From_date, '%Y-%m-%d')* tc.amount totalAmount

FROM tc_wallet tc

WHERE tc.login_id = 'sunny.thangaraj'
    AND tc.expense = 'DAILY ALLOWANCE'      
0 голосов
/ 08 декабря 2018

Вы можете использовать DISTINCT

SELECT  DISTINCT
        tc.expense AS Expense
        ,tc.`tour_sub_code`
        ,tc.login_id
        ,tc.currency
        ,tc.amount
        ,tc.date
        ,tc.from_date
        ,tc.to_date
        ,tc1.NoOfDays
        ,tc1.NoOfDays*tc.amount totalAmount

        FROM tc_wallet tc ,

       (SELECT 
        DATEDIFF(
          STR_TO_DATE(to_date, '%Y-%m-%d'),
          STR_TO_DATE(From_date, '%Y-%m-%d')
        ) NoOfDays 
      FROM
        tc_wallet 
      WHERE expense = 'DAILY ALLOWANCE' 
        AND login_id = 'sunny.thangaraj') AS tc1 

        WHERE tc.login_id = 'sunny.thangaraj'
        AND tc.expense = 'DAILY ALLOWANCE'       

http://www.mysqltutorial.org/mysql-distinct.aspx

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