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

Отляво Присъединете се към един случаен запис MySQL

Поради RAND() вашата подзаявка не е детерминистична и следователно се изпълнява за всеки ред в Sponsor таблица и всеки път връща случаен идентификатор, който може да съвпада или не с идентификатора на текущия ред. Така че не само е възможно нито един ред да не съответства на произволния идентификатор. Възможно е също няколко реда да го направят.

За примерните данни с двама спонсори подзаявката може да върне следните стойности:

  • (1, 1) ще съответства на първия ред (1=1, 2=1)
  • (1, 2) ще съответства на двата реда (1=1, 2=2)
  • (2, 1) няма да съответства на нито един ред (1=2, 2=1)
  • (2, 2) ще съответства на втория ред (1=2, 2=2)

За да гарантирате, че подзаявката се изпълнява само веднъж, можете да използвате клаузата SELECT. След това съединете резултата като извлечена таблица с Sponsor таблица:

SELECT C.*, S.Name AS SponName 
FROM (
    SELECT C.ID AS CompID, C.Name AS CompName, (
        SELECT ID FROM Sponsor WHERE Company = C.ID ORDER BY RAND() LIMIT 1
    ) as SponID
    FROM Company C
) C
LEFT JOIN Sponsor S ON S.ID = C.SponID

Демонстрация:http://rextester.com/LSSJT25902




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Репликация между SQL Server и MYSQL

  2. Как бързо да преименувам MySQL база данни (промяна на името на схемата)?

  3. mysql изтриване при присъединяване?

  4. как да правя заявки от две таблици?

  5. Как да получите достъп до отдалечена база данни MySql от iPhone App