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

Вложен оператор Select в MYSQL съединение

Аз правя този тип заявка по различен начин, с свързване за изключване вместо подзаявка. Искате да намерите редовете на B, които имат максималното време за даден ID; с други думи, където никой друг ред няма по-голямо време и същия идентификатор.

SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
LEFT OUTER JOIN B AS B2 ON B.ID = B2.ID AND B.Time < B2.Time
WHERE B2.ID IS NULL

Можете също да използвате изведена таблица , което трябва да работи по-добре от използването на корелирана подзаявка.

SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
JOIN (SELECT ID, MAX(Time) AS Time FROM B GROUP BY ID) AS B2
  ON (B.ID, B.Time) = (B2.ID, B2.Time)

P.S.:Добавих greatest-n-per-group етикет. Този тип SQL въпроси се появяват всяка седмица в Stack Overflow, така че можете да следвате този етикет, за да видите десетки подобни въпроси и техните отговори.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Динамична опора MySQL

  2. utf8 разлика в сортирането между unicode и датски

  3. varchar(255) срещу tinytext/tinyblob и varchar(65535) срещу blob/text

  4. Защо индексът на s не се използва за сортиране тук?

  5. SQL Избор от две таблици с вътрешно присъединяване и ограничение