当前位置: 首页 > 面试题库 >

MySQL-选择,加入

阎雪峰
2023-03-14
问题内容

几个月前,我和其他人一起用PHP编写了一个简单的应用程序。在那里,我们需要根据一个用户ID和您需要从该用户ID选择的行中获取的另一个值,从多个表中执行SELECT。

我的第一个想法是创建多个SELECT并解析PHP脚本中的所有输出(使用所有mysql_num_rows()和类似的函数进行检查),但是那个家伙告诉我他会这样做。“好的没问题!”
我想,我的写作要少得多。好吧,当我发现他只用一条SQL语句就做到了时,真是一个惊喜:

SELECT
  d.uid AS uid, p.pasmo_cas AS pasmo, d.pasmo AS id_pasmo ...
FROM
  table_values AS d, sectors AS p
WHERE
  d.userid='$userid' and p.pasmo_id=d.pasmo
ORDER BY
  datum DESC, p.pasmo_id DESC

(语句的缩短部分(…))

通常,我需要知道此方法(执行此方法的正确方法?)与JOIN之间的区别-什么时候应该使用哪个方法?

同样,对这两种解释和示例的任何引用都将非常方便(尽管不是来自MySQL引用-我确实是这种材料的新手,并且在这里大致写成文章。)


问题答案:

, 记号在ANSI-92标准中被替换,因此从某种意义上说现在已经20年了。

另外,在进行OUTER JOIN和其他更复杂的查询时,该JOIN表示法更加明确,易读并且(在我看来)是可调试的。

作为一般原则,请避免,并使用JOIN

根据优先级,JOIN的ON子句位于WHERE子句之前。这样一来,您就a LEFT JOIN b ON a.id = b.id WHERE b.id IS NULL可以检查中是否没有匹配的行b

使用,表示法类似于同时处理WHERE和ON条件。



 类似资料:
  • 问题内容: 我正在尝试选择mysql表中的重复行,它对我来说很好,但问题是它不是让我选择该查询中的所有字段,而是让我选择用作不同的字段名,让我写查询更好的了解 第一个工作正常 现在,当我尝试选择所有字段时,我最终会出现错误 我正在尝试选择最新的重复项,比如说ticket_id 127是行ID 7、8、9的3倍,因此我想选择一次,最新条目在这种情况下为9,这适用于所有其余项ticket_id的 任何

  • 问题内容: 我看到了这个答案,我希望他是不对的,就像有人不正确地告诉主键在一个列上,而我不能在多个列上设置它一样。 这是我的桌子 我想选择用户ID 2并递归,以便获得其所有直接子对象和间接子对象(即ID 4和5)。 如何以这种方式工作?我在postgresql和sqlserver中看到了递归。 问题答案: 看起来很麻烦,但是要使用它, (或您要在层次树中查找的任何密钥ID)。 前提是从您正在使用的

  • 问题内容: 我是MSSQL用户,现在将数据库转换为MySQL。我在MySQL中编写以下查询: 我得到以下错误 如何用MySQL正确编写这样的查询? 问题答案: 使用CREATE TABLE SELECT语法。 http://dev.mysql.com/doc/refman/5.0/en/create-table- select.html

  • 下列选项是根据在第一步选择的文件格式而有所不同。 包含列的标题 如果勾选了这个选项,字段名将会包含在导出的文件。 如果零,留空白 如果字段内容是 0,留空白。 追加 将记录追加至现有的文件。 遇到错误时继续 在导出进程中忽略遇到的错误。 在 XML 中使用属性格式 属性格式 <RECORDS> <RECORD OrderNo="1003" ItemNo="1" PartNo="1313" Qty=

  • 下列选项是根据在第一步选择的文件格式而有所不同。 包含列的标题 如果勾选了这个选项,字段名将会包含在导出的文件。 如果零,留空白 如果字段内容是 0,留空白。 追加到输出文件 将记录追加至现有的文件。 遇到错误时继续 在导出进程中忽略遇到的错误。 记录分隔符、字段分隔符、文本标识符号 指定记录的分隔符号、字段的分隔符号和用于括住文本值的字符。 日期排序、日期分隔符 指定日期的格式和日期的分隔符。

  • 下列选项是根据在第一步选择的文件格式而有所不同。 包含列的标题 如果勾选了这个选项,字段名将会包含在导出的文件。 如果零,留空白 如果字段内容是 0,留空白。 追加 将记录追加至现有的文件。 遇到错误时继续 在导出进程中忽略遇到的错误。 在 XML 中使用属性格式 属性格式 <RECORDS> <RECORD OrderNo="1003" ItemNo="1" PartNo="1313" Qty=