2014-12-23 80 views
-2

我有兩個表如表A和B.表和列名在這兩個表中A和B是MySQL查詢多列

 A      B 
------------------------ ----------------------- 
| ID | sID | qID | fID | | xmlText | sID | qID | 
------------------------ ----------------------- 
| 1 | 1 | 1 | 213 | | xml | 1 | 1 | 
| 2 | 1 | 2 | 213 | | xml | 1 | 2 | 
| 3 | 1 | 3 | 213 | | xml | 1 | 3 | 
| 4 | 2 | 1 | 213 | | xml | 2 | 1 | 
| 5 | 2 | 2 | 213 | | xml | 2 | 2 | 
| 6 | 2 | 3 | 213 | | xml | 2 | 3 | 
| 7 | 4 | 1 | 214 | | xml | 4 | 1 | 
------------------------ ----------------------- 

現在我想編寫一個查詢,將選擇所有SID和將表A中的qID與213的值進行比較,並將這些sID和fID傳遞給表B並逐個獲取所有文本,如下面的輸出中所示。

-------------------------- 
| Text | sID | qID | fID | 
-------------------------- 
| abc | 1 | 1 | 213 | 
| abc | 1 | 2 | 213 | 
| abc | 1 | 3 | 213 | 
| abc | 2 | 1 | 213 | 
| abc | 2 | 2 | 213 | 
| abc | 2 | 3 | 213 | 
-------------------------- 

我試過下面的代碼。

SELECT s.territoryID, t.name, s.sectionName, s.attributeName, s.shopID, s.attributeID 
FROM scoreanalysis AS s 
INNER JOIN territories AS t ON s.territoryID = t.ID 
WHERE s.territoryID IN 
( 
    SELECT t.ID FROM territories as t 
    WHERE t.formatID = 213 and t.territorylevelID =349537 
    and t.lft > 2 and t.rht < 397 
) 
AND s.achievedScore =0 AND s.applicableScore !=0 

SELECT questionComment from comments where 
shopID=".$row["shopID"]." and questionID=".$row["attributeID"] 

什麼是可能的解決方案來解決這個問題!任何幫助?由於提前

+0

其中是文本列?在哪張桌子? –

+0

粘貼你在這裏試過的東西 –

+0

文本列在B表中。 @Naveen – DDay

回答

1

你可以加入兩個表一起,並添加以下條件:

  • SID匹配
  • QID匹配
  • tableA.fID是213

在你選擇,你可以從tableB中獲取text,sid和qid值,並從tableA中獲得這樣的結果:

SELECT b.xmlText, b.sid, b.qid, a.fid 
FROM tableA a 
JOIN tableB b ON b.sid = a.sid AND b.qid = a.qid AND a.fid = 213; 
+0

如果不是1:1的關係,這會給你重複的答案 – Mureinik

0

exists運營商應該做的伎倆:

SELECT `text` 
FROM b 
WHERE EXISTS (SELECT * 
       FROM a 
       WHERE a.sID = b.sID and a.qID = b.qID AND fID = 213) 
0
SELECT b.xmlText as Text, a.sID, a.qID, a.fID 
    FROM a, b 
    WHERE a.sID = b.sID and a.qID = b.qID AND a.fID = 213; 

這會給你輸出

-------------------------- 
| Text | sID | qID | fID | 
-------------------------- 
| xml | 1 | 1 | 213 | 
| xml | 1 | 2 | 213 | 
| xml | 1 | 3 | 213 | 
| xml | 2 | 1 | 213 | 
| xml | 2 | 2 | 213 | 
| xml | 2 | 3 | 213 | 
-------------------------- 
0

試試這個:

SELECT b.text, a.sid, a.qid, a.fid 
FROM a 
LEFT OUTER JOIN b ON a.sID = b.sID AND a.qID = b.qID 
WHERE a.fID = 213; 
0

SQL查詢:

SELECT `qID`,`sID`, `xmlText` AS `text` 
FROM `B` 
WHERE EXISTS (
    SELECT `sID`, `qID`, `fID` , `id` 
    FROM `a` 
    WHERE a.sID = B.sID 
     AND a.qID=B.qID 
     AND fID=213 
)