REQUÊTE UNION - COMMENT FAIRE ?Chers tous,
Nous recherchons votre aide. Nous créons une requête qui extrait les données de plusieurs tables (comme d'habitude), mais nous aimerions faire une union entre deux tables primaires. Un exemple de la façon dont notre requête SQL ressemble est ci-dessous. Comment pouvons-nous y parvenir en utilisant le générateur de requête ? Jusqu'à présent, nous pouvons interroger la base de données en utilisant uniquement la première partie de la requête avant l'instruction UNION. Nous avons lu les livres JSL, mais nous n'avons pas trouvé ce que nous recherchions. Votre aide est grandement appréciée!
La requête SQL d'origine ressemble donc à ceci :
USE BLAH -- c'est le nom de la base de données
(SÉLECTIONNER
GENO.NAME COMME [GENOTYPE],
GENO.PEDIGREE COMME [PEDIGREE],
EXPMT.NAME AS [EXPERIMENT],
LOC.NAME COMME [LOCALISATION],
TRAITS.NOM COMME [TRAIT],
MOYENS.ANNÉE COMME [ANNÉE],
MOYEN.MOY AS [DONNÉES]
DE BLAH.dbo.MEANS
JOINTURE INTERNE BLABLA .dbo.GENO ON GENO.ID=MEANS.ENT1
JOINTURE INTERNE BLABLA .dbo.EXPMT ON EXPMT.ID=MEANS.EXPT
JOINTURE INTERNE BLABLA .dbo.LOC ON LOC.ID=EXPMT.LOC
JOINTURE INTERNE BLABLA .dbo.TRAITS SUR TRAITS.ID=MEANS.TRAIT
WHERE GENO.NAME IN ('a', 'b', 'c')
AND TRAITS.NAME = 'RENDEMENT'
ET LOC.NOM = 'FARGO'
ET MOYENS.ANNEE EN ('2015','2016','2017'))
SYNDICAT(
SÉLECTIONNER
GENO.NAME COMME [GENOTYPE],
GENO.PEDIGREE COMME [PEDIGREE],
EXPMT.NAME AS [EXPERIMENT],
LOC.NAME COMME [LOCALISATION],
TRAITS.NOM COMME [TRAIT],
SIGNIFIE 2.ANNÉE COMME [ANNÉE],
MOYEN2.MOY AS [DONNÉES]
DE BLAH.dbo.MEANS2
JOINTURE INTERNE BLABLA .dbo.GENO ON GENO.ID=MEANS2.ENT1
JOINTURE INTERNE BLABLA .dbo.EXPMT ON EXPMT.ID=MEANS2.EXPT
JOINTURE INTERNE BLABLA .dbo.LOC ON LOC.ID=EXPMT.LOC
JOINTURE INTERNE BLABLA .dbo.TRAITS SUR TRAITS.ID=MEANS2.TRAIT
WHERE GENO.NAME IN ('a', 'b', 'c')
ET TRAITS.NOM = 'ALPHA_AMYLASE'
ET LOC.NOM = 'FARGO'
ET SIGNIFIE 2.ANNÉE EN ('2015','2016','2017'))
COMMANDER PAR TRAITS.TBFLD_NAME
Re : REQUÊTE SYNDICALE - COMMENT FAIRE ?Merci à tous pour votre aide. Je vais suivre vos recommandations et je vous tiendrai au courant si je rencontre des problèmes.
Passe une bonne journée! UN M
Re : REQUÊTE SYNDICALE - COMMENT FAIRE ?Il y a deux options que je connais:
- Exécutez deux requêtes et concaténez les deux tables résultantes à l'aide de JSL.dt1 << Concaténer(dt2);
- Utilisez la requête personnalisée Nouvelle requête SQL.
Ci-dessous un exemple *. Il trouve toutes les instances où le nom correspond dans les 2 tables ou où le nom est vide (null) dans la table #1 (t1).Ce n'est pas votre scénario, car cela utilise des tables JMP, mais cela montre que vous pouvez utiliser votre instruction SQL dans un CustomSQL().
New SQL Query(
Version( 130 ),
Connection( "JMP" ),
JMP Tables(
["Big Class Joins Table1" =>
"C:\temp\JSLC2_working\scripts\Big Class Joins Table1.jmp",
"Grade Level Joins Table2" =>
"C:\temp\JSLC2_working\scripts\Grade Level Joins Table2.jmp"]
),
QueryName( "SQLQuery1" ),
CustomSQL(
"SELECT t1.name, t1.age, t2.name AS \!"name 2\!", t2.\!"grade level\!"
FROM \!"Big Class Joins Table1\!" t1
LEFT OUTER JOIN \!"Grade Level Joins Table2\!" t2
ON ( t1.name = t2.name )
UNION ALL
SELECT t1.name, t1.age, t2.name AS \!"name 2\!", t2.\!"grade level\!"
FROM \!"Grade Level Joins Table2\!" t2
LEFT OUTER JOIN \!"Big Class Joins Table1\!" t1
ON ( t2.name = t1.name )
WHERE t1.name IS NULL
"
)
) << Run
Je suis sûr que ce blog compte de nombreux experts SQL (je ne suis pas un expert), qui pourraient fournir une meilleure solution.
*Il s'agit d'une première version d'un script créé pour JSL Companion, 2nd Ed.
Re : REQUÊTE SYNDICALE - COMMENT FAIRE ?@anaheilman ,
Ce qui n'est pas clair pour moi, c'est que lorsque vous dites qu'une partie de la requête fonctionne, cela n'a pas vraiment de sens. Si vous avez 2 tables - "Means" et "Means2", vous pouvez utiliser la fonction Join pour effectuer l'équivalent de l'union. Si votre requête SQL effectue déjà l'union, vous devriez simplement pouvoir utiliser Connect DataBase()
Re : REQUÊTE SYNDICALE - COMMENT FAIRE ?Salut Uday,
Ma requête fonctionne dans JMP, la première partie avant l'union. Ma question est de savoir comment assembler à l'aide du langage JMP la requête Union puisque nous avons deux tables principales Means et Means2.
Merci de votre aide. UN MRe : REQUÊTE SYNDICALE - COMMENT FAIRE ?@anaheilman ,
Supposons que vous ayez une requête SQL fonctionnelle, si vous le faites, vous devriez pouvoir utiliser Open Database() pour connecter JMP à votre base de données et extraire les résultats de votre requête SQL.
Fichier ==> Index des scripts ==> "Ouvrir la base de données"