2012-06-22 69 views
1

我正在构建一个查询来收集来自多个表的数据。我想从一张表中抓取所有item_ids,然后根据item_id从其他表中收集其他数据来构建结果。我可以发誓,这是可能的;但是,我似乎无法让它工作。这里是我想要做的一个例子:MySQL查询/子查询问题

SELECT item_id AS mainID, 
(SELECT anotherField 
    FROM anotherTABLE 
    WHERE item_id=mainID) 
FROM theMainTable; 

当然这只是一个例子。实质上,我需要使用子查询中主查询的item_id。我可以发誓,我以前做过,但我不记得如何...

我试图做的只是一个查询,而不是任何额外的编程语言。我想最终将其设置为存储过程。感谢或有任何帮助。

UPDATE

看起来像一个联接没有工作......感谢所有帮助。

这里是我的,以防万一别人最终查询运行到这样的事情:

SELECT DISTINCT 
    Q.item_id, Q.timestamp, Q.employee, 
    QA.employeeNotes, Q2.itemDesc, Q2.itemExtraData 
FROM 
    itemLog Q 
LEFT JOIN 
    itemComments QA ON Q.item_id = QA.item_id 
LEFT JOIN 
    itemLog Q2 ON Q.item_id = Q2.item_id AND Q2.type = 'begin' 
WHERE 
    Q.verb = 'itemStatus' 
    AND NOT (QA.employeeNotes IS NULL); 
+2

不,使用联接 – kalpaitch

+0

我没有尝试加入,因为我想通了实际查询正想对此太多了。我会给你一个镜头...... – W3BGUY

+1

你应该使用一个带有QA的内部连接,因为你希望它的某个字段在where子句中不为空 - 谢谢你接受我的答案。 – Sebas

回答

1
SELECT a.item_id AS mainID, b.anotherField 
FROM theMainTable a 
    INNER JOIN anotherTABLE b ON a.item_id=b.item_id 

应避免使用select语句子查询,因为它们将针对主表中的每个返回行进行计算,而内部连接确保适当的优化和表格路径。

1

您应该使用

SELECT mt.itemID AS mainID, at.anotherField 
FROM theMainTable mt INNER JOIN anotherTABLE at 
ON mt.itemID = at.item_id 
1
SELECT themaintable.item_id AS mainID, 
     anothertable.anotherfield 
FROM themaintable 
     INNER JOIN anothertable 
       ON item_id = mainid; 
1

尝试这样:

SELECT 
    item_id AS mainID, 
    anotherField 
FROM theMainTable 
INNER JOIN anotherTABLE ON item_id=mainID; 
1

加入两个表,这就是为什么你有钥匙:

SELECT table_x.id, table_y.another_field 
FROM table_x 
INNER JOIN table_y ON table_x.id = table2.x_id; 
1

如果你真的需要有一个嵌套查询然后执行:

SELECT item_id AS mainID, 
    (SELECT anotherField 
    FROM anotherTABLE 
    WHERE anotherTABLE.item_id=theMainTable.item_id) AS anotherField 
FROM theMainTable; 

n ested查询不起作用可能是因为您没有定义该字段来自的表,并且列名称含糊不清。

说了上面,这真的是你会使用,而不是加入一个案例:

SELECT theMainTable.mainID, 
     anotherTABLE.anotherField 
FROM theMainTable INNER JOIN anotherTABLE 
ON theMainTable.item_id = anotherTABLE.mainID