2011-06-16 60 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