Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL Self-join със сравнение на данни за различни дни

Получавате дублирани колони, защото както имате, вие правите заявки от T1 И T2. Така че, освен ако изрично не кажете покажи ми само T1.*, той ще вземе колони от ДВЕТЕ препратки към псевдоними на таблици.

Тъй като вашата заявка изпълнява ИЛИ за датите, вероятно ще получите и декартов резултат.

Сега познавам структурата на вашата таблица, но може да сте по-добре с изрична заявка нещо като...

SELECT
      t1.day,
      t2.day as OtherDay,
      t1.quality,
      t1.anotherColumn,
      t2.OtherAnotherColumn,
      t1.thirdColumn,
      t2.OtherThirdColumn
   FROM 
      my_table t1
         join my_table t2
            on t1.quality = t2.quality
           AND t2.day = '2015-01-09'
   where
      t1.day = '2015-01-08' 

Имайте индекс на вашата "my_table" въз основа на (ден, качество), за да оптимизирате заявката. И можете просто да продължите да добавяте по двойки колоните, които се опитвате да сравните между day1 и day2. T1 ще върне само тези, свързани с първия ден, а псевдонимът на T2 ще се покаже само за съвпадащи записи за втората дата.

Сега, ако има само записи от страната T1 без съответстващ запис T2 за въпросното качество и дата, но все пак искате да ги видите, тогава просто променете JOIN на LEFT JOIN.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. влезте с потребителско име или имейл адрес в php

  2. Синхронизиране на данни между MySQL и MongoDB

  3. mysql съхранен функционален параметър

  4. Проверете дали имейл вече съществува в базата данни

  5. Заявката за избор на MySQL е ужасно бавна