sql >> Database teknologi >  >> RDS >> Mysql

Venstre Deltag i en enkelt tilfældig optagelse MySQL

På grund af RAND() din underforespørgsel er ikke deterministisk og udføres derfor for hver række i Sponsor tabel og genindstiller hver gang et tilfældigt id, som måske matcher eller ej id'et for den aktuelle række. Så det er ikke kun muligt, at ingen række vil matche det tilfældige ID. Det er også muligt, at flere rækker vil.

For eksempeldata med to sponsorer kan underforespørgslen returnere følgende værdier:

  • (1, 1) vil matche den første række (1=1, 2=1)
  • (1, 2) vil matche begge rækker (1=1, 2=2)
  • (2, 1) matcher ingen række (1=2, 2=1)
  • (2, 2) vil matche den anden række (1=2, 2=2)

For at garantere, at underforespørgslen kun udføres én gang, kan du bruge den i SELECT-sætningen. Tilslut derefter resultatet som afledt tabel med Sponsor tabel:

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

Demo:http://rextester.com/LSSJT25902




  1. Beskriv resultatsæt i PostgreSQL?

  2. MYSQL - Hvad er en primær nøgle?

  3. gemme arabisk i SQL-database

  4. mysql betinget join afhænger af en kolonne