开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 713|回复: 6
收起左侧

[其它求助] 来个大佬帮忙写个SQL语句

[复制链接]
结帖率:88% (22/25)
发表于 2023-9-21 18:54:54 | 显示全部楼层 |阅读模式   新加坡
230精币
现有数据库TableA,拥有字段A,B,C,H1,H2,H3,H4,H5,H6,H7,H8,K1,K2,K3,K4,K5,K6,K7,K8帮我写一段sql语句以实现根据传入的开始和结束索引来取出对应的字段数据,比如我传入开始索引2-4,就帮我取出A,B,C,H2,H3,H4,K2,K3,K4,如果我传入1-5,就帮我取出A,B,C,H1,H2,H3,H4,H5,K1,K2,K3,K4,K5,其中C字段对应了TableC表的id,且C字段内容为1,2,3,需要使用链表cha询方法将前面所说的指定索引和TableA表的C字段对应TableC表id的数据一起取出,我使用的语言是PHP,最好能兼顾一下性能,不要一堆for循环的臃肿代码,感激不尽


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:85% (11/13)

签到天数: 19 天

发表于 2023-9-21 19:12:12 | 显示全部楼层   广东省深圳市
gpt啊 你可以使用以下的SQL语句来实现你的需求:

sql
SELECT A, B, C,
       H1, H2, H3, H4, H5, H6, H7, H8,
       K1, K2, K3, K4, K5, K6, K7, K8
FROM TableA
WHERE C IN (SELECT id FROM TableC WHERE C IN (1, 2, 3))
LIMIT :start_index, (:end_index - :start_index + 1)
在上面的SQL语句中,:start_index 和 :end_index 是你传入的开始和结束索引。你需要将它们替换为实际的值。

这个语句通过嵌套的子cha询来先获取符合条件的C字段对应的TableC表的id,然后通过IN子句将结果与TableA表关联起来。同时,使用LIMIT语句来限制取出的记录范围。

在PHP中执行上述SQL语句可以使用PDO或mysqli等数据库操作扩展库。你可以根据自己的实际环境选择合适的方式进行cha询操作。这样可以提高性能并避免使用循环。

希望对你有所帮助!如有任何问题,请随时提问。
回复

使用道具 举报

结帖率:88% (22/25)

签到天数: 1 天

 楼主| 发表于 2023-9-21 19:19:44 | 显示全部楼层   广东省东莞市
1173029975 发表于 2023-9-21 19:12
gpt啊 你可以使用以下的SQL语句来实现你的需求:

sql

你自己瞧瞧gpt写的逻辑,这玩意没用
回复

使用道具 举报

发表于 2023-9-21 19:59:45 | 显示全部楼层   福建省福州市
[SQL] 纯文本查看 复制代码
SELECT 
    A, B, C, H1, H2, H3, H4, H5, H6, H7, H8, K1, K2, K3, K4, K5, K6, K7, K8
FROM
    (SELECT 
        A, B, C, H1, H2, H3, H4, H5, H6, H7, H8, K1, K2, K3, K4, K5, K6, K7, K8,
            ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
    FROM
        TableA) AS temp
JOIN TableC ON temp.C = TableC.id
WHERE
    temp.rn BETWEEN 2 AND 4
ORDER BY
    temp.rn;


确保TableA表的C字段和TableC表的id字段上有索引以提高性能

补充内容 (2023-9-21 20:02):
正常还是把取字段的逻辑写代码里,
回复

使用道具 举报

发表于 2023-9-21 20:04:02 | 显示全部楼层   福建省福州市
[SQL] 纯文本查看 复制代码
SELECT
    A, B, C,
    CASE
        WHEN temp.rn BETWEEN 1 AND 5 THEN H1
        ELSE NULL
    END AS H1,
    CASE
        WHEN temp.rn BETWEEN 1 AND 5 THEN H2
        ELSE NULL
    END AS H2,
    CASE
        WHEN temp.rn BETWEEN 1 AND 5 THEN H3
        ELSE NULL
    END AS H3,
    CASE
        WHEN temp.rn BETWEEN 1 AND 5 THEN H4
        ELSE NULL
    END AS H4,
    CASE
        WHEN temp.rn BETWEEN 1 AND 5 THEN H5
        ELSE NULL
    END AS H5,
    CASE
        WHEN temp.rn BETWEEN 1 AND 5 THEN K1
        ELSE NULL
    END AS K1,
    CASE
        WHEN temp.rn BETWEEN 1 AND 5 THEN K2
        ELSE NULL
    END AS K2,
    CASE
        WHEN temp.rn BETWEEN 1 AND 5 THEN K3
        ELSE NULL
    END AS K3,
    CASE
        WHEN temp.rn BETWEEN 1 AND 5 THEN K4
        ELSE NULL
    END AS K4
FROM
    (SELECT
        A, B, C, H1, H2, H3, H4, H5, K1, K2, K3, K4,
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
    FROM
        TableA) AS temp
JOIN TableC ON temp.C = TableC.id
WHERE
    temp.rn BETWEEN 1 AND 5
ORDER BY
    temp.rn;
回复

使用道具 举报

结帖率:88% (22/25)

签到天数: 1 天

 楼主| 发表于 2023-9-21 20:51:55 | 显示全部楼层   广东省东莞市
1377248995 发表于 2023-9-21 20:04
[mw_shl_code=sql,true]SELECT
    A, B, C,
    CASE

如果我有100个字段呢,是不是还得写100条case
回复

使用道具 举报

结帖率:100% (2/2)

签到天数: 13 天

发表于 2023-9-22 14:57:06 | 显示全部楼层   广东省佛山市
看懂的都是大神。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表