2011-06-16 3 views
1

J'ai des problèmes pour interroger mes données. Voici mes tableaux:Problème de requête mysql avec plusieurs relations de table

CREATE TABLE `A` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `myString` varchar(10) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

CREATE TABLE `B` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `myStringId1` int(10) NOT NULL, 
    `myStringId2` int(10) NOT NULL, 
    `value` varchar(10) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `index1` (`myStringId1`), 
    KEY `index2` (`myStringId2`), 
    CONSTRAINT `fk_B2` FOREIGN KEY (`myStringId2`) REFERENCES `A` (`id`), 
    CONSTRAINT `fk_B1` FOREIGN KEY (`myStringId1`) REFERENCES `A` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

myStringId1 et myStringId2 ont des contraintes clés étrangères TABLEAU A (id)

Ok-moi de préciser ce que je veux obtenir par requête: Lets assumer certaines valeurs pour les tables données:

TABLE A: 
ROW1: 22, "foo" 
ROW2: 33, "bar" 

TABLE B: 
ROW1: 1, 22, 33, "true" 
ROW2: 2, 22, 22, "false" 

maintenant, ce que je dois une requête où je donne St anneau "foo" et obtenir le résultat suivant de rejoindre les deux tables:

RESULT: 
ROW1: "foo","bar", "true" 
ROW2: "foo", "foo", "false" 

donné "bar" String Je pense ceci:

RÉSULTAT: ROW1: "foo", "bar", "vrai "

des idées?

+0

pouvez-vous s'il vous plaît expliquer votre demande plus? Il n'est pas clair quels résultats désires-tu? – Abhay

+0

@Abhay: Est-ce plus clair – Moritz

Répondre

0

Après avoir lu votre commentaire, je pense que cela est plus proche de ce que vous avez besoin:

SELECT a1.myString as myString1, a2.myString as myString2, b.value 
FROM `B` b 
    JOIN `A` a1 on a1.id = b.myStringId1 
    JOIN `A` a2 on a2.id = b.myStringId2 
WHERE a1.myString = 'SOME STRING' OR a2.myString = 'SOME STRING' 

Les deux jointures assurera les deux b.myStringId1 et b.myStringId2 sont les clés existantes pour TABLE A et le WHERE assure que l'un de ces 2 cordes est celui dont vous avez besoin.

+0

bien joindre une table plusieurs fois est intéressant. Je vais expérimenter avec ça. Quoi qu'il en soit le problème est que je veux sélectionner une ou plusieurs lignes de la table B qui contient uniquement des ID (myStringId1, myStringId2) qui sont des clés étrangères à TABLE A et où la représentation de chaîne réelle dans TABLE A doit correspondre à l'une ou l'autre chaîne donnée. Cela rend-il les choses plus claires? – Moritz

Questions connexes