2014-12-23 83 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 
)