2011-06-16 32 views
1

我有问题来查询我的数据。这里是我的表:与多个表关系的mysql查询问题

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 

其中myStringId1myStringId2有外键约束,以表A(ID

好让我澄清我想通过查询来实现的: 让为给定的表格假设一些值:

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

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

现在我需要的是一个查询,其中我给St环 “foo” 和从连接两个表得到以下结果:

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

给出字符串 “bar” 我希望这样的:

结果: ROW1: “富”, “酒吧”,“真“

有什么想法?

+0

请问您能解释一下您的要求吗?目前还不清楚你期望的结果是什么? – Abhay 2011-06-16 17:41:58

+0

@Abhay:这个更清楚吗 – Moritz 2011-06-17 07:37:09

回答

0

阅读您的评论之后,我觉得这是更接近你需要的东西:

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' 

两个连接将确保双方b.myStringId1b.myStringId2是现有的按键为TABLE AWHERE确保这些2的一个字符串是你需要的。

+0

多次加入一张桌子很有意思。我会试验这个。无论如何,问题是我想从表B中选择一行或多行,其中只包含ID(myStringId1,myStringId2),它们是TABLE A的外键,并且TABLE A中的实际字符串表示应与一个或另一个给定字符串匹配。这是否使事情更清楚? – Moritz 2011-06-16 16:58:33