sql >> Database >  >> RDS >> Mysql

De gebruikte SELECT-statements hebben een ander aantal kolommen (REDUX!!)

UNION's (UNION en UNION ALL ) vereisen dat alle vragen die UNION zou hebben:

  1. Hetzelfde aantal kolommen in de SELECT-component
  2. Het kolomgegevenstype moet op elke positie overeenkomen

Uw vraag heeft:

SELECT f.*, u1.*, u2.* ...
UNION 
SELECT fid2 FROM friends

De gemakkelijkste herschrijving die ik heb is:

   SELECT f.*, u.*
     FROM FRIENDS AS f
     JOIN USERS AS u ON u.uid = f.fid2
    WHERE f.fid1 = 1 
      AND f.fid2 > 1
UNION 
   SELECT f.*, u.*
     FROM FRIENDS AS f
     JOIN USERS AS u ON u.uid = f.fid1
    WHERE f.fid2  = 1 
      AND f.fid1 < 1
ORDER BY RAND()
LIMIT 6;

Je bent LEFT JOIN'd naar de USERS tafel tweemaal, maar lijken de informatie niet te gebruiken.




  1. Beveiligingsoverwegingen voor MariaDB-implementaties in een hybride cloudomgeving

  2. OPTIE (HERCOMPIEREN) is altijd sneller; Waarom?

  3. @BatchSize slim of dom gebruiken?

  4. Een CHECK-beperking toevoegen aan een bestaande tabel in SQL Server (T-SQL)