SQL内部联接2表

时间:2017-10-01 01:57:31

标签: mysql join inner-join

希望得到一些帮助,我已经尝试了一个内部联接,显示所有'产品'产品表中的信息,表示使用内部连接销售超过10个单位的任何产品。

PRODUCT TABLE (Columns)
P_CODE, P_DESCRIPT, P_INDATE, P_QOH, P_MIN, P_PRICE, P_DISCOUNT, V_CODE

LINE TABLE (Columns) this table shows the lines/information for each 
invoice

INV_NUMBER, LINE NUMBER, P_CODE, LINE_UNITS, LINE_PRICE, LINE_TOTAL

我知道我必须使用公共密钥属性(p_code)进行连接,但我无法弄清楚如何在内连接中进行求和。

这是我最近的尝试:

SELECT * PRODUCT FROM PRODUCT
INNER JOIN line
ON product.p_code = line.p_code
WHERE sum(line_units) >=10
AND line.p_code = product.p_code;

错误:靠近"产品&#34 ;;语法错误

任何帮助将不胜感激, 谢谢。

2 个答案:

答案 0 :(得分:3)

您似乎在PRODUCT部分中有表名SELECT。并且sum()需要在SELECT部分内与最后的HAVING子句一起发生。

SELECT *, sum(line_units) as line_units_sum FROM product
INNER JOIN line ON product.p_code = line.p_code
WHERE line.p_code = product.p_code
HAVING line_units_sum >= 10

答案 1 :(得分:0)

要求

显示product表中所有销售超过10件的产品的所有产品信息。

解决方案

由于您只想从product表构建投影,并且不需要line表中的任何列,因此还可以使用以下相关子查询: / p>

SELECT *
FROM product
WHERE 10 < (
    SELECT COUNT(*)
    FROM line
    WHERE line.p_code = product.p_code
)

如果JOIN的成本低于其他替代方法,则数据库优化器可能会选择在内部使用JOIN。因此,这并不意味着查询将对外部表记录进行逐行处理。只有执行计划才能说明数据库引擎如何执行查询。