Je suis prêt à parier que c'est une réponse très simple car je ne suis pas un novice en SQL.
le tableau 1 contient la colonne 1 (critère 1), la colonne 2 (critère 2), la colonne 3 (métrique 1)
le tableau 2 contient la colonne 1 (critère 1), la colonne 2 (critère 2), la colonne 3 (métrique 2 propre au tableau 2. critères 2)
Il peut y avoir de 1 à 5 valeurs du critère 2 pour chaque critère 1 du tableau.
quand j'utilise la déclaration de jointure ici (en supposant que j'identifie le tableau 1 comme étant un avant cela):
Select WeddingTable, TableSeat, TableSeatID, Name, Two.Meal
FROM table1 as One
inner join table2 as Two
on One.WeddingTable = Two.WeddingTable and One.TableSeat = Two.TableSeat
Je ne reçois qu'une des combinaisons de critères 1/critère 2 même si je sais pertinemment qu'il y en a 3 ou 4. Comment puis-je obtenir toutes les combinaisons?
Prenons le cas d’un mariage où la table 1 est essentiellement un tableau de places assises et la table 2 représente l’option de repas choisie par chaque table/siège. Le tableau 1 contient le très pratique TableSeatID, mais le tableau 2 n’a pas d’ID comparable.
Exemple de données:
Les résultats doivent montrer les 4 lignes, à savoir les 3 sièges de WeddingTable 001 et le siège de WeddingTable 002.
Résultats souhaités:
select one.*, two.meal
from table1 as one
left join table2 as two
on (one.weddingtable = two.weddingtable and one.tableseat = two.tableseat)
SELECT aa.*,
bb.meal
FROM table1 aa
INNER JOIN table2 bb
ON aa.tableseat = bb.tableseat AND
aa.weddingtable = bb.weddingtable
INNER JOIN
(
SELECT a.tableSeat
FROM table1 a
INNER JOIN table2 b
ON a.tableseat = b.tableseat AND
a.weddingtable = b.weddingtable
WHERE b.meal IN ('chicken', 'steak')
GROUP by a.tableSeat
HAVING COUNT(DISTINCT b.Meal) = 2
) c ON aa.tableseat = c.tableSeat
create table a1
(weddingTable INT(3),
tableSeat INT(3),
tableSeatID INT(6),
Name varchar(10));
insert into a1
(weddingTable, tableSeat, tableSeatID, Name)
values (001,001,001001,'Bob'),
(001,002,001002,'Joe'),
(001,003,001003,'Dan'),
(002,001,002001,'Mark');
create table a2
(weddingTable int(3),
tableSeat int(3),
Meal varchar(10));
insert into a2
(weddingTable, tableSeat, Meal)
values
(001,001,'Chicken'),
(001,002,'Steak'),
(001,003,'Salmon'),
(002,001,'Steak');
select x.*, y.Meal
from a1 as x
JOIN a2 as y ON (x.weddingTable = y.weddingTable) AND (x.tableSeat = y. tableSeat);
On dirait que vous voulez lister toutes les métriques?
SELECT Criteria1, Criteria2, Metric1 As Metric
FROM Table1
UNION ALL
SELECT Criteria1, Criteria2, Metric2 As Metric
FROM Table2
ORDER BY 1, 2
Si vous souhaitez uniquement une combinaison Critères1 + Critères2, regroupez-les:
SELECT Criteria1, Criteia2, SUM(Metric) AS Metric
FROM (
SELECT Criteria1, Criteria2, Metric1 As Metric
FROM Table1
UNION ALL
SELECT Criteria1, Criteria2, Metric2 As Metric
FROM Table2
)
ORDER BY Criteria1, Criteria2