好的,这是我的困境,我有一个数据库设置,大约5个表都具有完全相同的数据结构.以这种方式分离数据以用于本地化目的并且总共分割大约450万条记录.
大多数时候只需要一张桌子,一切都很好.但是,有时需要从2个或更多表中获取数据,并且需要按用户定义的列进行排序.这是我遇到问题的地方.
数据列:
id, band_name, song_name, album_name, genre
Run Code Online (Sandbox Code Playgroud)
MySQL声明:
SELECT * from us_music, de_music where `genre` = 'punk'
Run Code Online (Sandbox Code Playgroud)
MySQL吐出这个错误:
#1052 - Column 'genre' in where clause is ambiguous
Run Code Online (Sandbox Code Playgroud)
显然,我做错了.有人愿意为我阐明这一点吗?
我有两个数据帧,我想使用dplyr加入.一个是包含名字的数据框.
test_data <- data.frame(first_name = c("john", "bill", "madison", "abby", "zzz"),
stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)
另一个数据框包含Kantrowitz名称语料库的清理版本,用于识别性别.这是一个最小的例子:
kantrowitz <- structure(list(name = c("john", "bill", "madison", "abby", "thomas"), gender = c("M", "either", "M", "either", "M")), .Names = c("name", "gender"), row.names = c(NA, 5L), class = c("tbl_df", "tbl", "data.frame"))
Run Code Online (Sandbox Code Playgroud)
我基本上想要test_data使用kantrowitz表格从表中查找名称的性别.因为我要将它抽象为一个函数encode_gender,所以我不知道将要使用的数据集中列的名称,因此我不能保证它将会被name用作,例如kantrowitz$name.
在基础RI中将以这种方式执行合并:
merge(test_data, kantrowitz, by.x = "first_names", by.y = "name", all.x = TRUE)
Run Code Online (Sandbox Code Playgroud)
返回正确的输出:
first_name gender
1 abby either
2 bill either
3 john M
4 madison …Run Code Online (Sandbox Code Playgroud) 只需使用查询和示例来更好地了解联接.我注意到在SQL Server 2008中,以下两个查询给出了相同的结果:
SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name
Run Code Online (Sandbox Code Playgroud)
SELECT * FROM TableA
FULL JOIN TableB
ON TableA.name = TableB.name
Run Code Online (Sandbox Code Playgroud)
这些是完全相同的动作产生相同的结果,还是会在更复杂的例子中遇到不同的结果?这只是可互换的术语吗?
使用oracle的加号(+)和ansi标准join符号之间的区别是什么?
性能有差异吗?
加号表示法是否已弃用?
我有这个代码
User.find(:all, :limit => 10, :joins => :user_points,
:select => "users.*, count(user_points.id)", :group =>
"user_points.user_id")
Run Code Online (Sandbox Code Playgroud)
它生成以下sql
SELECT users.*, count(user_points.id)
FROM `users`
INNER JOIN `user_points`
ON user_points.user_id = users.id
GROUP BY user_points.user_id
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
是否可以以其他方式进行LEFT JOIN而不是INNER JOIN,User.find_by_sql并且可以手动输入查询?
我有两个表,一个有主键,另一个有外键.
我想从主表中提取数据,只有当辅助表没有包含它的密钥的条目时.与简单内部联接相反的排序,仅返回通过该键连接在一起的行.
当我在我的SQL语句中只有一个内连接时,它完美地工作.我尝试加入第二个表,现在我收到一个错误,指出存在语法错误(缺少运算符).这有什么不对?
adsFormView.SelectCommand = "SELECT * FROM [tableCourse] INNER JOIN [tableGrade] ON [tableCourse].[grading] = [tableGrade].[id] INNER JOIN [tableCourseType] ON [tableCourse].[course_type] = [tableCourseType].[id] WHERE [prefix]='" & myPrefix & "' AND [course_number]='" & myCourseNum & "'"
Run Code Online (Sandbox Code Playgroud) 我有一个连接两个表的MySQL查询
他们加入选民的家庭.household_id和household.id
现在我需要做的是修改它,其中选民表连接到第三个名为elimination的表,沿voter.id和elimination.voter_id,但是我想要排除选民表中的任何记录消除表中的相应记录.我如何制作一个查询来做到这一点?
这是我目前的查询
SELECT `voter`.`ID`, `voter`.`Last_Name`, `voter`.`First_Name`,
`voter`.`Middle_Name`, `voter`.`Age`, `voter`.`Sex`,
`voter`.`Party`, `voter`.`Demo`, `voter`.`PV`,
`household`.`Address`, `household`.`City`, `household`.`Zip`
FROM (`voter`)
JOIN `household` ON `voter`.`House_ID`=`household`.`id`
WHERE `CT` = '5'
AND `Precnum` = 'CTY3'
AND `Last_Name` LIKE '%Cumbee%'
AND `First_Name` LIKE '%John%'
ORDER BY `Last_Name` ASC
LIMIT 30
Run Code Online (Sandbox Code Playgroud) 我想知道是否有人可以帮助提高我对SQL中JOIN的理解.[如果它对问题很重要,我正在考虑MS SQL Server.]
取3个表A,B [A由某些A.AId相关]和C [B与某些B.BId相关的C]
如果我撰写查询,例如
SELECT *
FROM A JOIN B
ON A.AId = B.AId
Run Code Online (Sandbox Code Playgroud)
一切都很好 - 我对它的运作方式很满意.
当表C(或其他一些D,E,......被添加)时会发生什么
在这种情况下
SELECT *
FROM A JOIN B
ON A.AId = B.AId
JOIN C ON C.BId = B.BId
Run Code Online (Sandbox Code Playgroud)
什么是C加入? - 是B表(以及B表中的值吗?)或者是C表加入的A + B Join的结果是否是其他临时结果集?
[暗示并非B表中的所有值都必须在基于A,B的连接条件的临时结果集A + B中]
我要问的一个具体(并且相当人为)的例子是因为我试图理解我在下面看到的行为:
Tables
Account (AccountId, AccountBalanceDate, OpeningBalanceId, ClosingBalanceId)
Balance (BalanceId)
BalanceToken (BalanceId, TokenAmount)
Where:
Account->Opening, and Closing Balances are NULLABLE
(may have opening balance, closing balance, or none)
Balance->BalanceToken is 1:m - a balance …Run Code Online (Sandbox Code Playgroud) 为什么这样做(返回"一,二,三"):
var words = ['one', 'two', 'three'];
$("#main").append('<p>' + words.join(", ") + '</p>');
Run Code Online (Sandbox Code Playgroud)
这项工作(返回"列表:111"):
var displayIt = function() {
return 'the list: ' + arguments[0];
}
$("#main").append('<p>' + displayIt('111', '222', '333') + '</p>');
Run Code Online (Sandbox Code Playgroud)
但不是这个(返回空白):
var displayIt = function() {
return 'the list: ' + arguments.join(",");
}
$("#main").append('<p>' + displayIt('111', '222', '333') + '</p>');
Run Code Online (Sandbox Code Playgroud)
我必须对我的"arguments"变量做什么才能使用.join()?
join ×10
sql ×6
left-join ×2
mysql ×2
activerecord ×1
dplyr ×1
inner-join ×1
javascript ×1
jquery ×1
ms-access ×1
not-exists ×1
oracle ×1
performance ×1
r ×1
select ×1
syntax-error ×1
t-sql ×1