如何在第一个查询中创建已经LEFT JOIN的子查询

时间:2013-06-13 08:07:25

标签: php mysql

美好的一天我想问一下我的SQL命令是否有什么问题? 我得到的错误是#1054 - Unknown column 'imaster_tbl.id' in 'field list'

我认为这是因为我将't1'放在imaster_tbl after the FROM keyword

之后

你可以帮我解决这个问题..这是我的SQL命令:

    SELECT imaster_tbl.id, imaster_tbl.die_name, imaster_tbl.part_name,
imaster_tbl.drawing_number, imaster_tbl.drawing_part_number,
imaster_tbl.sub_letter,imaster_tbl.specs, imaster_tbl.file_path,
idrawing_type_tbl.drawing_type, idie_type_tbl.die_type, irevision_tbl.revision,
irelay_type_tbl.relay_type FROM imaster_tbl t1
LEFT JOIN idrawing_type_tbl ON imaster_tbl.drawing_type_id=idrawing_type_tbl.drawing_type_id
LEFT JOIN idie_type_tbl ON imaster_tbl.die_type_id = idie_type_tbl.die_type_id
LEFT JOIN irelay_type_tbl ON imaster_tbl.relay_type_id=irelay_type_tbl.relay_type_id 
LEFT JOIN irevision_tbl ON imaster_tbl.revision_id = irevision_tbl.revision_id 
WHERE revision = (SELECT MAX(revision) FROM imaster_tbl t2 WHERE t2.drawing_part_number = t1.drawing_part_number)

但这个适用于我,没有LEFT JOIN。

select * from table t1 where revision = (select max(revision) from table t2 where t2.filename = t1.filename)

非常感谢。

2 个答案:

答案 0 :(得分:1)

在您的FROM子句中,您已将t1的别名imaster_tbl定义为FROM imaster_tbl t1,并在您使用imaster_tbl的查询中引用此表/视图。声明别名后,应使用别名。

答案 1 :(得分:1)

错误表明服务器无法找到特定字段。如果该字段确实存在,则有点难以说明,因为您不发布表定义。但是,它确实存在,您只需要在选择部分查询时用t1替换imaster_tbl。 当您在FROM部分中编写“imaster_tbl t1”时,您正在创建该表的别名,并且需要使用别名来引用该表中的字段。 别名在例如当您想要更容易阅读代码时,创建临时表或多次运行同一个表时,需要确定它们的连接方式。

我已在下面更新了您的SQL

SELECT
  t1.id,
  t1.die_name,
  t1.part_name,
  t1.drawing_number,
  t1.drawing_part_number,
  t1.sub_letter,
  t1.specs,
  t1.file_path,
  idrawing_type_tbl.drawing_type,
  idie_type_tbl.die_type,
  irevision_tbl.revision,
  irelay_type_tbl.relay_type
FROM
  imaster_tbl t1
  LEFT JOIN idrawing_type_tbl ON
    master_tbl.drawing_type_id=idrawing_type_tbl.drawing_type_id
  LEFT JOIN idie_type_tbl ON
    imaster_tbl.die_type_id = idie_type_tbl.die_type_id
  LEFT JOIN irelay_type_tbl ON
    imaster_tbl.relay_type_id=irelay_type_tbl.relay_type_id 
  LEFT JOIN irevision_tbl ON
    imaster_tbl.revision_id = irevision_tbl.revision_id 
WHERE
  revision = (
    SELECT
      MAX(revision)
    FROM
      imaster_tbl t2
    WHERE
      t2.drawing_part_number = t1.drawing_part_number
  )