-4
votes

Sélectionnez dans Sélectionner la requête SQL

Je veux créer une requête SQL. Le nom de la colonne que je veux, c'est dans une autre table. J'ai écrit cette requête.

SELECT (SELECT FieldName From TableGENQuest WHERE ID = 1)
FROM TableGEN
WHERE strSO = 'RV12648-01';


7 commentaires

Faites un jointure gauche à la place.


Afficher les données des deux tables


Très probablement, vous devez utiliser Join. Ces tables ont-elles des champs communs?


S'il vous plaît, définissez "ça ne marche pas."


"Ne fonctionne pas" n'est pas un message d'erreur utile ou une déclaration de problème. Nous ne pouvons pas réparer "ne fonctionnert pas" dans le code, plus d'un mécanicien peut corriger une voiture qui est «ne fonctionne pas», sans aucune autre information sur le problème. Comment ça ne marche-t-il pas? Qu'est-ce qui se passe exactement lorsque vous exécutez le code? Cela nous aiderait également à connaître les définitions de la table et à certains échantillons de données d'entrée / sortie. Comme d'autres l'ont mentionné, il est possible que cela soit résolu à l'aide d'une jointure, mais il est difficile d'être sûr sans savoir plus d'informations.


D'accord. Cette situation semble potentiellement résulte d'un schéma mal conçu. Il n'est pas habituel de choisir de sélectionner de manière dynamique un nom de colonne basé sur une ligne d'une autre table. Vous n'avez toujours pas montré que toutes les informations (E.g. STRSO Colonne est manquante), mais il semble que vous utilisiez peut-être une colonne Strgenxxx différente pour chaque identifiant de référence? Si vous avez quelque chose de dynamique comme des identifiants, vous devez enregistrer des données pour chaque identifiant dans lignes , pas les colonnes. Ensuite, ce type de problème ne surgirait pas.


Pour accomplir ce que vous voulez en utilisant votre structure de données actuelle, vous aurez besoin d'un SQL généré de manière dynamique et que le seul moyen de le faire dans Access est d'écrire un script VBA qui crée et exécute la requête correcte. Voir Stackoverflow.com/Questtions/28093543/... par exemple


3 Réponses :


-2
votes

Essayez ceci:

SELECT TableGENQuest.FieldName 
FROM TableGEN, TableGENQuest 
WHERE TableGENQuest.ID=1 AND WHERE strSO = 'RV12648-01';


2 commentaires

Lisez votre requête à nouveau.


Vous ne pouvez pas avoir deux sur les mots-clés, et vous devez utiliser la syntaxe de jointure standard. Les jointures séparées par des virgules sont une chose héritée, n'est plus recommandée.



-1
votes
SELECT a.strSO,b.FieldName,b.ID
FROM TableGEN a
LEFT OUTER JOIN
(
SELECT FieldName,ID From TableGENQuest WHERE ID = 1
)
b 
ON a.ID = b.ID
WHERE strSO = 'RV12648-01'

2 commentaires

sur a.id = b.id ... Où est votre preuve que les deux tables contiennent des champs "ID", ou qu'ils mappent l'un de l'autre? Nous ne connaissons que sur un champ d'identité, de sorte que votre code n'est que des devinettes. Et si vous lisez de plus près la description de l'Op, vous verrez qu'il est peu probable qu'il soit le cas qu'ils correspondent. OP est en fait rechercher une solution SQL dynamique, qui n'est pas possible sans code VBA.


Sélectionnez B.FieldName ... Impression de la chaîne "Strgen01". Il n'imprimera pas les données de la colonne souhaitée nommée Strgen01 dans l'autre table.



1
votes

TL; DR: Votre demande n'est pas possible à l'aide de MS Access SQL seul. strong>

Vous devrez utiliser VBA pour ouvrir un jeu d'enregistrements contenant le contenu de la table TableGenQuest code> et construire une instruction SQL appropriée tout en itérant sur les enregistrements détenus par un tel enregistrement. p>

par exemple: p> xxx pré>

ce qui précède générera une requête définie Dans la base de données actuelle avec une instruction SQL en sélectionnant les champs dont les noms de champ sont obtenus à l'aide du SQL: P>

SELECT FieldName FROM TableGENQuest WHERE ID = 1


1 commentaires

@Mustafa Comment quelqu'un a-t-il été censé le savoir de votre question? C'est la première fois que vous l'avez mentionné. Cela aide si vous dites aux gens le vrai problème du début. Mais de toute façon, le concept sera exactement le même, vous écrivez simplement la même idée à l'aide de la syntaxe Java. As-tu essayé? Où êtes-vous coincé coincé?