命名其他表中的列

时间:2014-12-07 22:58:01

标签: mysql sql

只是一个关于命名来自其他表的列的快速问题,下面我将表放在SQL语句中,但之后我把缩写版本“MO”这是正确的/这将在所有情况下工作还是我应该只是坚持像module.mod_code这样的完整版本?

SELECT MO.MOD_CODE, MO.MOD_NAME, MO.ECTS_UNITS,MO.DESCRIPTION
FROM MODULE MO, SYLLABUS SY, PROGRAMME PR
WHERE MO.MOD_CODE = SY.MOD_CODE
AND SY.PROG_CODE = PR.PRO_CODE
AND PR.NFQ_LEVEL = ‘LEVEL 9’
AND MO.DESCRIPTION LIKE ‘%RESEARCH%’ OR DESCRIPTION LIKE ‘%QUALATIVE%’ OR DESCRIPTION LIKE     ‘%QUANTITATIVE%’;

谢谢:)

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你试图使用表别名来引用列,并且想知道使用MO。[column]和module。[column]是否有任何区别?

如果是这种情况,则最好使用表别名来引用该列。这是因为您可以加入到同一个表中以检索不同的数据子集。如果这样做,您将需要定义您希望数据来自哪个集合。

模块AS M ----程序AS P ------模块AS SUBM

答案 1 :(得分:0)

无法坚持完整版。为表或子查询指定别名后,即查询范围内该对象的名称。实际上,会发生的事情是表名变为表别名,因此您可以使用它来限定表中的列。

您还应该学习正确的显式JOIN语法。我也猜测你在WHERE条款中缺少括号:

SELECT MO.MOD_CODE, MO.MOD_NAME, MO.ECTS_UNITS,MO.DESCRIPTION
FROM MODULE MO JOIN
     SYLLABUS SY
     ON MO.MOD_CODE = SY.MOD_CODE JOIN
     PROGRAMME PR
     ON SY.PROG_CODE = PR.PRO_CODE
WHERE PR.NFQ_LEVEL = 'LEVEL 9' AND
      (MO.DESCRIPTION LIKE '%RESEARCH%' OR
       MO.DESCRIPTION LIKE '%QUALATIVE%' OR
       MO.DESCRIPTION LIKE '%QUANTITATIVE%'
      );

如果您在此查询中尝试SELECT MODULE.MOD_CODE之类的内容,则会返回错误,因为表别名MODULE未分配给任何对象。