simple-rangée sous-requête renvoie plusieurs lignes oracle
J'ai trois tables comme ci-dessous:
Test
+--------------+--------+
| Test_Case_ID | Status |
+--------------+--------+
| 10 | PASS |
| 20 | FAIL |
| 30 | FAIL |
+--------------+--------+
Défaut
+-----------+
| Defect_ID |
+-----------+
| 500 |
| 400 |
+-----------+
et link1
+--------------+-----------+
| Test_Case_ID | Defect_ID |
+--------------+-----------+
| 20 | 500 |
| 30 | 500 |
| 30 | 400 |
+--------------+-----------+
Je suis en train de la requête ci-dessous
select
test.test_case_id,
test.status,
case when test.status = 'FAIL' then
(select link1.defect_id
from link1
where
test.test_case_id = link1.test_case_id)
end as defect1_id
from test test
J'obtiens l'erreur ci-dessous "Erreur 12/20/2012 10:05:17 0:00:00.093 Crapaud pour les Analystes de Données: ORA-01427: simple-rangée sous-requête renvoie plusieurs lignes 1 78
"
Est-il un moyen de récupérer à la fois les enregistrements de "30" à partir de la table de lien? Parce que je veux afficher que les cas de test en 30 qui est défectueux en raison de défauts de 500 & 400.
Merci beaucoup
votre clause where est inversé de la sous-requête
Tu veux dire que ça doit être
Vous avez deux dossiers en lien avec Test_Case_ID = 30. Qui Defect_ID voulez-vous obtenir?
Tu veux dire que ça doit être
where link1.test_case_id = test.test_case_id
. J'ai essayé aussi et toujours la même erreur.Vous avez deux dossiers en lien avec Test_Case_ID = 30. Qui Defect_ID voulez-vous obtenir?
OriginalL'auteur javanoob | 2012-12-20
Vous devez vous connecter pour publier un commentaire.
Avez-vous pensé à utiliser un
JOIN
au lieu de la sous-requête:Voir SQL jouer avec la Démo
Ce sera le retour à la fois les dossiers, alors vous pouvez décider de l'élément à retourner dans votre résultat final.
Résultat:
En fonction de votre commentaire, si vous utilisez Oracle 11g, vous pouvez utiliser le
LISTAGG()
fonction de combiner les enregistrements en une seule ligne:Voir SQL jouer avec la Démo
Résultat:
cette requête ne récupérer tous les documents avez-vous vu la démo?
Merci @bluefeet pour votre temps à la recherche dans ce. Juste curieux de savoir ne peut-on pas afficher à la fois le defect_ids dans un enregistrement de sortie plutôt que de deux lignes..je pense que c'est idiot..je veux juste savoir..Merci
Oui, vous pouvez, quelle version d'oracle?
version 11.1.0.6.0
OriginalL'auteur Taryn
Vous disposez de deux lignes dans la table de liaison qui ont des valeurs de "30". C'est votre problème.
Lequel de ces lignes que vous voulez?
Pour corriger la sous-requête, vous pouvez dire
select max(link1.defect_id)
ou ajouterand rownum = 1
à lawhere
clause.Ce que vous voulez, c'est probablement un bi plus compliqué. Comment au sujet de cette version, qui concatène les défauts en chaîne de caractères:
Vous n'indiquez pas de version d'Oracle. Si
listagg
n'est pas disponible, alorswm_concat
est probablement le cas. Ici est une référence sur les différentes manières de la concaténation de chaînes de caractères dans une agrégation dans Oracle.Merci Gordon pour votre temps à chercher dans ma question.
OriginalL'auteur Gordon Linoff