小编use*_*566的帖子

为什么这个简单的Left Join从不匹配的行返回数据?

有关此问题的操作,请参阅简单的http://sqlfiddle.com/#!9/e853f/1.

我指的是MySQL ver 5.6.12-log

据我了解,左连接为最右侧数据集中的列返回NULL,其中左侧数据集中的键不存在于右侧数据集中.

但是,即使左侧不存在左手键,我也会从右侧返回数据.

谁能解释一下这里发生了什么?

SQLfiddle创建:

  • 一个包含6行的表,每行只包含一个整数ID
  • 第二个表包含3行,其中包含一些整数ID以及另外两个INT字段
  • 基于该第二个表的视图,该表返回包含整数ID的3行以及从其他两个INT字段派生的文本字段

(显然,视图中的3个ID对应于6行表中的一些ID.)

SQL SELECT*FROM LEFT JOIN ON table_ID = view_ID; 按预期返回6行,但所有这些行都在文本字段中有数据,而不是3个不匹配的数据为NULL

如果视图中用于派生文本列的方法稍有改动,那么Left Join SQL会给出正确的结果. (您可以通过选择性地在sql小提琴中注释掉两个方法中的一个或另一个来显示这个)

但是肯定不是优化器首先评估视图,所以数据的创建方式和它包含的内容无关紧要?

(我承认的早期问题的这个简化版本对于非法合理的答案来说太复杂了)

有人建议(Jeroen Mostert)我展示数据和预期结果.这里是:

表人

personID
--------
   1
   2
   3
   4
   5
   6
Run Code Online (Sandbox Code Playgroud)

查看payment_state

payment_personID  |   state
----------------------------
       1          |   'equal'
       2          |   'under'
       3          |   'over'
Run Code Online (Sandbox Code Playgroud)

询问

SELECT * FROM  person 
LEFT JOIN   payment_state 
ON personID = payment_personID;
Run Code Online (Sandbox Code Playgroud)

预期结果

personID | payment_personID  |state
-------------------------------------
    1    |      1            | 'equal' …
Run Code Online (Sandbox Code Playgroud)

mysql sql left-join

7
推荐指数
1
解决办法
964
查看次数

如何使Delphi表单上的所有控件都不可编辑/可更改,但仍允许用户复制内容

我有一个显示数据库数据的表单,它有几个按钮和几个面板.这些面板包含各种组件,特别是TEdits,TComboBox,TDateTimePicker,TCheckBox,TListBox和TstringGrid.

当打开表单时,用户可以查看但不能编辑我当前禁用除使用按钮之外的所有组件的数据

for i := 0 to FrmAddNewMember.ComponentCount-1 do
    if FrmAddNewMember.Components[i] is TPanel then
      (FrmAddNewMember.Components[ i ] as TPanel).enabled := false;
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我现在希望用户能够将TEdits中的文本,TDateTimePicker中的日期,TComboBox中的所选项目等复制到剪贴板,但仍然不能更改它.

我将代码更改为以下内容,将TEdits设置为只读.这样做我想要的TEdits,但其他类型的控件没有只读属性,所以我像以前一样禁用它们.

for i := 0 to FrmAddNewMember.ComponentCount-1 do
    if not (FrmAddNewMember.Components[i] is TButton) then //(keep buttons working)
       case FrmAddNewMember.Components[i] of
          TEdit: (FrmAddNewMember.Components[ i ] as TEdit).readonly := true; //allows copying but not editing
          TComboBox: (FrmAddNewMember.Components[ i ] as TComboBox).enabled := false;  //no read only propert?
          TDateTimePicker: (FrmAddNewMember.Components[ i ] as TDateTimePicker).enabled := false;  //ditto
          TCheckBox: (FrmAddNewMember.Components[ i ] …
Run Code Online (Sandbox Code Playgroud)

delphi copy readonly

5
推荐指数
1
解决办法
657
查看次数

标签 统计

copy ×1

delphi ×1

left-join ×1

mysql ×1

readonly ×1

sql ×1