ci框架中 select语句 和join语句 怎么用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ci框架中 select语句 和join语句 怎么用相关的知识,希望对你有一定的参考价值。

$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');

参考技术A LEFT JOIN 关键字会从左表那里返回所有的行,即使在右表中没有匹配的行。
用法如下:
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name

使用 SELECT 和 JOIN 语句将多个数据插入表中

【中文标题】使用 SELECT 和 JOIN 语句将多个数据插入表中【英文标题】:Inserting multiple data into table with SELECT and JOIN statement 【发布时间】:2018-06-05 08:00:52 【问题描述】:

我想将数据插入到表中,其中一列由选择查询填充。这是我的 SQL 语句:

INSERT INTO books ( gid, type, membernumber,  changedate, user)
  VALUES( '2b4493e8-cae8-4624-8177-fcc96553c5be',
          2,
          (SELECT member FROM mem m JOIN group g ON m.uid = g.sgroup),
          TIMESTAMP '2017-01-03 00:00:00.000',
          'mark'
        );

我想要实现的是对于每个插入,membernumber 将取自 mem 表,基于 JOINgroup 表。

当我执行这个语句时,我得到了错误:

用作表达式的子查询返回多行

例如,如果连接将产生 20 行,则将插入 20 条记录,每个 member 值替换插入中的 membernumber 20 行。

更新

我还有另一个查询,其中两列必须用 SELECT-JOIN 语句替换。 @Tim 给了我一个专栏的例子。我想要一个用两个 SELECT-JOIN 语句填充两列的示例。

【问题讨论】:

【参考方案1】:

您可以将其改写为INSERT INTO ... SELECT

INSERT INTO books (gid, type, membernumber, changedate, user)
SELECT
    '2b4493e8-cae8-4624-8177-fcc96553c5be',
    2,
    member,
    '2017-01-03 00:00:00.000',
    'mark'
FROM mem m
INNER JOIN `group` g
    ON m.uid = g.sgroup;

这应该可以修复您的语法错误,但现在您必须决定在没有 WHERE 子句的情况下此插入是否有意义。您几乎对每个成员的每个字段都进行了硬编码。

【讨论】:

感谢您的回复。我的下一个问题是,是否可以在同一个查询中对 2 个或多个 Select-Join 语句执行相同的操作,因为我有另一个与第一个类似的问题,但现在使用 3 个 Select-Join 语句。您能否使用上面的查询向我展示一个示例,但假设“用户”将具有 SELECT-Join 之类的成员编号。谢谢 @EddyFreeman 我不完全听从您的评论,但看起来与这个问题有很大的不同。您可能想问一个新问题。

以上是关于ci框架中 select语句 和join语句 怎么用的主要内容,如果未能解决你的问题,请参考以下文章

join和on语句中select语句选择公共列的区别

MySql语句中Union和join的用法

INNER JOIN到SELECT语句

用join连接三个表的查询,该怎么写语句?

sql语句同表join写法

在 sql中 多行sql语句怎么执行,是从上往下 还是从下往上??????求解