Il y a 3 tableaux. Permet de les appeler a, b et c. Les données sélectionnées du tableau a doivent être intersectées avec b ou c selon la valeur d'une cellule du tableau a. Permet d'appeler cette cellule d. Existe-t-il un moyen dans MySQL de faire des requêtes comme:

SELECT
  a.cell,
  a.other_cell,
  a.d,
  alias.cell,
  alias.other_cell if(
    a.d = 3,
    left join b as alias on b.id = a.id,
    left join c as alias on c.id = a.id
  )
FROM
  a where a.id = 123
0
neolodor 3 sept. 2020 à 16:22

2 réponses

Meilleure réponse

Vous pouvez essayer par exemple Jointure conditionnelle comme ici mais à la place coalesce, utilisez CASE WHEN

En bref:

Au lieu de cela, vous devez simplement LEFT OUTER JOIN aux deux tables, et dans votre clause SELECT, renvoyez les données de celle qui correspond

select
  E.EmployeeName,
  CASE
    WHEN d = 3 THEN s.store
    WHEN d <>3 THEN o.office
  END as Location
from
  Employees E
left outer join
  Stores S on …
left outer join
  Offices O on …

NOTE Je pense que les deux colonnes doivent avoir le même type, au moins en PG, pas sûr de MYSQL

1
Zavael 3 sept. 2020 à 13:41

En supposant que vous souhaitiez sélectionner parmi les différentes tables (b et c) en fonction d'une valeur de "cellule" dans table a alors quelque chose comme ce travail peut fonctionner pour vous.

SELECT
  a.cell,
  a.other_cell,
  a.d,
  if(a.d = 3, b.cell, c.cell) cell
FROM a
INNER JOIN b on b.id = a.id 
INNER JOIN c on c.id = a.id 
WHERE a.id = 123

Cela devrait joindre les 3 tables à condition que l'id dans b et c corresponde également à l'id dans la table a. La fonction if sélectionnera la colonne cell du tableau b ou c en fonction de la valeur de la colonne d du tableau a.

Également utile: https://www.w3resource.com/mysql /control-flow-functions/if-function.php

0
Dharman 3 sept. 2020 à 13:45