zhallalxj 2017-05-08 08:53 采纳率: 42.9%
浏览 4362
已采纳

MySQL多表连接查询,一对多

有4个表,

attr表

字段名 类型
id BIGINT
name VARCHAR
amount BIGINT

prop表

字段名 类型
id BIGINT
name VARCHAR
status BIGINT

prop_attr表

字段名 类型
id BIGINT
prop_id BIGINT
attr_id BIGINT

commodity表

字段名 类型
id BIGINT
prop_id BIGINT
name VARCHAR
price DOUBLE

这几个表,一个prop可以关联多个attr数据,
使用prop_attr表来关联,是1对多,一个commodity只能关联一个prop,现在要实现以下查询功能:

查询 commodity表中的数据,但是 因为prop可以关联多个attr,所以 希望一条commodity中的数据能带上全部的attr数据,mysql查询语句么写

  • 写回答

5条回答 默认 最新

  • zhallalxj 2017-05-09 02:31
    关注

    好吧,用mybatis解决了

     <resultMap id="BaseResultMap" type="com.niuwan.mall.model.Commodity">
    
            <id column="id" jdbcType="BIGINT" property="id"/>
            <result column="state" jdbcType="INTEGER" property="state"/>
            <result column="status" jdbcType="INTEGER" property="status"/>
            <result column="name" jdbcType="VARCHAR" property="name"/>
            <result column="prop_id" jdbcType="BIGINT" property="propId"/>
            <result column="classify_type" jdbcType="INTEGER" property="classifyType"/>
            <result column="price" jdbcType="DOUBLE" property="price"/>
            <result column="amount" jdbcType="BIGINT" property="amount"/>
            <result column="fpath" jdbcType="VARCHAR" property="fpath"/>
            <result column="explain" jdbcType="VARCHAR" property="explain"/>
            <result column="user_id" jdbcType="BIGINT" property="userId"/>
            <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
            <result column="modify_time" jdbcType="TIMESTAMP" property="modifyTime"/>
    
            <collection property="attributeList" column="attribute" ofType="com.niuwan.mall.model.Attribute">
                <id column="attr_id" jdbcType="BIGINT" property="id"/>
                <result column="attr_name" jdbcType="VARCHAR" property="attrName"/>
                <result column="attr_type" jdbcType="BIGINT" property="attrType"/>
                <result column="attr_amount" jdbcType="BIGINT" property="attrAmount"/>
                        <!--select="com.foo.bean.PostMapper.selectByBlogId"-->
            </collection>
        </resultMap>
    
            <select id="selectCommodityList" resultMap="BaseResultMap" parameterType="Map">
            SELECT c.*,a.id AS attr_id,a.attr_name AS attr_name,a.attr_amount AS attr_amount,a.attr_type AS attr_type
    
            FROM commodity AS c
            LEFT JOIN prop_attribute AS pr ON c.prop_id = pr.prop_id
            LEFT JOIN attribute AS a ON pr.attr_id = a.id
            WHERE 1=1
            <if test="status != null">
                AND c.status = #{status}
            </if>
    
            <if test="name != null">
                AND c.name like #{name}
            </if>
    
            <if test="orderByClause != null">
                order by ${orderByClause}
            </if>
    
            limit ${offset}, ${limit}
    
        </select>
    
    
    
    

    bean中定义

     private List<Attribute> attributeList;
    

    这样就能 查询一个commodity的时候查询多个attr了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式