MySQL查询/子查询问题

时间:2012-06-22 14:30:25

标签: mysql sql

我正在构建一个查询来从多个表中收集数据。我想从一个表中获取所有item_ids,然后根据item_id从其他表中收集其他数据来构建结果。我本可以发誓这是可能的;但是,我似乎无法让它发挥作用。这是我正在尝试做的一个例子:

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

当然这只是一个例子。基本上,我需要使用子查询中主查询的item_id。我本来可以发誓说我以前做过这个,但我不记得怎么样......

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

更新

看起来联接确实有效...感谢所有帮助。

这是我的最终查询,以防万一其他人遇到这样的事情:

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);

6 个答案:

答案 0 :(得分:1)

你应该使用

SELECT mt.itemID AS mainID, at.anotherField
FROM theMainTable mt INNER JOIN anotherTABLE at
ON mt.itemID = at.item_id

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

SELECT themaintable.item_id AS mainID, 
       anothertable.anotherfield 
FROM   themaintable 
       INNER JOIN anothertable 
               ON item_id = mainid; 

答案 3 :(得分:1)

尝试这样的事情:

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

答案 4 :(得分:1)

加入两个表,这就是你拥有密钥的原因:

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

答案 5 :(得分:1)

如果您确实需要嵌套查询,请执行以下操作:

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

嵌套查询无法正常工作的原因可能是因为您没有定义字段来自的表格,并且列名称含糊不清。

如上所述,这确实是你要使用连接的情况:

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