- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将数据库迁移为新数据库,以将一对多关系更改为多对多关系(并改进列命名方案)。 [编辑:我创建了一个 SQLFiddle为此。]
oldDB newDB
========================= =======================================
individuals people
- individual_id - id
- individual_name_first - first_name
- individual_name_last - last_name
- individual_name_other - additional_identifier
- individual_position - role
- individual_group_code - (replaced with people-groups table)
(There are duplicate rows
in this table for individ's
who are in more than one
group.)
groups groups
- (no id in oldDB) - id
- group_code - short_name
- group_name - full_name
people_groups
- id
- person_id
- group_id
- start_date
- end_date
具体来说,我在创建 people
之间的链接表时遇到问题。和groups
.
我已经创建了 people
和groups
表:
CREATE TABLE IF NOT EXISTS people (
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name varchar(50) NOT NULL,
last_name varchar(50) NOT NULL,
additional_identifier varchar(50) DEFAULT NULL COMMENT 'In case of duplicate first and last names',
role varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE newDB.people ADD UNIQUE `name` (last_name, first_name, additional_identifier);
INSERT INTO newDB.people
(id, first_name, last_name, role)
SELECT
individual_id, individual_name_last, individual_name_first, individual_position, COUNT(*)
FROM
oldDB.individuals
GROUP BY
individual_name_last, individual_name_first;
CREATE TABLE IF NOT EXISTS newDB.groups(
id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
full_name VARCHAR(255) NOT NULL UNIQUE,
short_name VARCHAR(255) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO newDB.groups
(full_name, short_name)
SELECT
group_name, group_code
FROM
oldDB.groups;
接下来我会CREATE
newDB.people-groups
表,但首先我要确保我可以 SELECT
正确的值(value)观:
SELECT
newDB.groups.id 'group id',
newDB.people.id 'person id',
individual_group_code 'group short name',
individual_name_last 'last name',
individual_name_first 'first name'
FROM
oldDB.individuals
LEFT JOIN
newDB.groups ON(
newDB.groups.short_name = oldDB.individuals.individual_group_code
)
LEFT JOIN newDB.people ON (
newDB.people.last_name = oldDB.individuals.individual_name_last
AND
newDB.people.first_name = oldDB.individuals.individual_name_first
)
GROUP BY
individual_name_last ASC,
individual_name_first ASC,
individual_group_code
第一个LEFT JOIN
仅用于显示组短名称以方便验证。 第二个LEFT JOIN
很重要:它应该允许 'person id'
输出从 newDB.people.id
拉取。相反,我只是在该列中为所有输出行获取 NULL。 其他所有内容都显示正确。我错过了什么?
这就是我希望得到的。 (我通过将 newDB.people.id 'person id'
替换为 oldDB.individuals.individual_id 'person id'
来生成它。为了举例说明问题,925 号和 1232 是两个不同组中的同一个人。新数据库将其简化为 925 号。)
Here是一个确实可以工作的SQLFiddle。为什么它在我的 phpmyadmin 中不起作用?
最佳答案
您正在对选择列表中的 5 列非聚合列执行分组依据
(3 列)。另外,这并不重要,列输出中没有聚合。
MySQL 将其视为distinct
(对于 3 列),并返回在 MRU 缓存中遇到的第一行,如果没有缓存,则返回在聚集索引或物理索引中遇到的第一行排序以满足 2 个非分组依据列。
换句话来说,这是一个用户错误。出了问题。我建议使用GROUP BY
来清理你的意图。
有些相关,请阅读我最近的回答 Here与 ONLY_FULL_GROUP_BY
相关。请参阅该链接的底部是 MySQL Handling of GROUP BY在我看来,这是对 MySQL 允许的实际问题和非标准的掩盖,这使得违反该标准的数据变得意外且难以解释。
那么 MySQL 开发团队做了什么?他们默认实现了该标准(从版本 5.7 开始),以禁止您刚刚执行的查询类型。
您的查询,没有 GROUP BY
,但有 order by newGroups.id,people.id
,在版本 5.7.14 服务器上:
关于mysql - 为什么我在 Left Join 上得到 NULL 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39563641/
我正在测试设置SQLAlchemy以映射现有数据库。这个数据库是很久以前自动建立的,它是由我们不再使用的先前的第三方应用程序创建的,因此 undefined 某些预期的事情,例如外键约束。该软件将管理
这个问题在这里已经有了答案: What is the difference between "INNER JOIN" and "OUTER JOIN"? (28 个答案) 关闭 7 年前。 INNE
这个问题在这里已经有了答案: What is the difference between "INNER JOIN" and "OUTER JOIN"? (29 个回答) 关闭7年前. INNER J
假设有两个表: table1.c1 table1.c2 1 1 A 2 1 B 3 1 C 4 2
假设有两个表: table1.c1 table1.c2 1 1 A 2 1 B 3 1 C 4 2
一.先看一些最简单的例子 例子 Table A aid adate 1 a1 2&nb
数据库操作语句 7. 外连接——交叉查询 7.1 查询 7.2 等值连接 7.3 右外
我有两个表 'users' 和 'lms_users' class LmsUser belongs_to :user end class User has_one :lms_user
我试图避免在 Rails 中对我的 joins 进行字符串插值,因为我注意到将查询器链接在一起时灵活性会降低。 也就是说,我觉得 joins(:table1) 比 joins('inner join
我有这个代码 User.find(:all, :limit => 10, :joins => :user_points, :select => "users.*, co
我刚刚开始探索 Symfony2,我很惊讶它拥有如此多的强大功能。我开始做博客教程在: http://tutorial.symblog.co.uk/ 但使用的是 2.1 版而不是 2.0 我的问题是我
什么是 SQL JOIN什么是不同的类型? 最佳答案 插图来自 W3schools : 关于SQL JOIN 和不同类型的 JOIN,我们在Stack Overflow上找到一个类似的问题: http
我有两个 Hive 表,我正在尝试加入它们。这些表没有被任何字段聚集或分区。尽管表包含公共(public)键字段的记录,但连接查询始终返回 0 条记录。所有数据类型都是“字符串”数据类型。 连接查询很
我正在使用 Solr 的(4.0.0-beta)连接功能来查询包含具有父/子关系的文档的索引。连接查询效果很好,但我只能在搜索结果中获得父文档。我相信这是预期的行为。 但是,是否有可能在搜索结果中同时
我正在使用可用的指南/api/书籍自学 Rails,但我无法理解通过三种方式/嵌套 has_many :through 关联进行的连接。 我有用户与组相关联:通过成员(member)资格。 我在多对多
什么是 SQL JOIN,有哪些不同的类型? 最佳答案 插图来自 W3schools : 关于SQL JOIN 和不同类型的 JOIN,我们在Stack Overflow上找到一个类似的问题: htt
我正在尝试访问数据库的两个表。在商店里,我保留了一个事件列表,其中包含 Table Event id, name,datei,houri, dateF,Hourf ,capacity, age ,de
我有 4 个表:booking、address、search_address 和 search_address_log 表:(相关列) 预订:(pickup_address_id, dropoff_a
我在YML中有以下结构:。我正试着创造一个这样的结构:。作业名称和脚本用~分隔,作业用;分隔。。我可以使用以下命令使其正常工作。然而,我想知道是否可以用一个yq表达式来完成,而不是通过管道再次使用yq
我在YML中有以下结构:。我正试着创造一个这样的结构:。作业名称和脚本用~分隔,作业用;分隔。。我可以使用以下命令使其正常工作。然而,我想知道是否可以用一个yq表达式来完成,而不是通过管道再次使用yq
我是一名优秀的程序员,十分优秀!