2014-12-23 3 views
-2

у меня есть две таблицы, как таблица 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 и qID из таблицы A против значения 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

В ваш выбор , вы можете вытащить значения text, sid и qid из tableB, а fid из 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 
) 
Смежные вопросы