我有一张金属表
MetalID integer
MetalName text
MetalCode text
Run Code Online (Sandbox Code Playgroud)
物品表
ItemID integer
ItemName text
...
Metal1 int Ref.-> metals.metalID
Metal2 int Ref.-> metals.metalID
Metal3 int Ref.-> metals.metalID
Run Code Online (Sandbox Code Playgroud)
我正在尝试选择三个MetalCodes
SELECT m.MetalCode as 'Metal1', m.MetalCode as 'Metal2',m.MetalCode as 'Metal3'
FROM Item as k
INNER JOIN Metals AS m ON m.metalID=k.metal1
INNER JOIN Metals AS m ON m.metalID=k.metal2
INNER JOIN Metals AS m ON m.metalID=k.metal3
WHERE k.ItemID=?
Run Code Online (Sandbox Code Playgroud)
看起来我完全错了.请帮忙.
我正在为我们公司的内部网构建一个相当大的"搜索"引擎,它有一个1miljon加上条目,它运行在一个相当快的服务器上,但是一些搜索查询需要1分钟.
这就是表格的外观

我尝试为它创建一个索引,但好像我错过了一些东西,这就是show index的显示方式

这是查询本身,它的排序大大减慢了查询,但即使没有排序的查询也有点慢.
SELECT SQL_CALC_FOUND_ROWS *
FROM `businessunit`
INNER JOIN `businessunit-postaddress` ON `businessunit`.`Id` = `businessunit-postaddress`.`BusinessUnit`
WHERE `businessunit`.`Name` LIKE 'tanto%'
ORDER BY `businessunit`.`Premium` DESC ,
CASE WHEN `businessunit`.`Name` = 'tanto'
THEN 0
WHEN `businessunit`.`Name` LIKE 'tanto %'
THEN 1
WHEN `businessunit`.`Name` LIKE 'tanto%'
THEN 2
ELSE 3
END , `businessunit`.`Name`
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)
很感谢任何形式的帮助
编辑:
这个查询有什么窒息99%是通过与wildcharacter的相关性排序%
当我做一个解释它说使用where; 使用fsort
我找不到关键词的文档,join但我在网上看到了使用它的例子.
我在Oracle hr模式中做了一些实验,我有表departments:
deparment_namemanager_idlocation_id一张桌子employees:
first_nameemployee_id和表locations:
location_idcity查询应返回department_name,部门经理的first_name以及部门所在的城市.
与使用关键字join相比,使用关键字的代码似乎返回了一些结果inner join
代码join:
select d.department_name, e.first_name,l.city
from departments d
join employees e on d.manager_id=e.employee_id
join locations l on d.location_id=l.location_id
Run Code Online (Sandbox Code Playgroud)
代码inner join:
select d.department_name, e.first_name,l.city
from departments d
inner join employees e on d.manager_id=e.employee_id
inner join locations l on d.location_id=l.location_id
Run Code Online (Sandbox Code Playgroud)
两种情况之间是否存在差异,或者我恰好偶然发现他们返回相同结果的情况?
我有一个SQL查询,它引用同一个表两次,我需要将表别名为两个单独的别名.我无法弄清楚如何用Knex来构建它.
有一个'Words'表和'Users'表.Words表有两个外键,'author_id'和'winner_id',引用Users表的'id'列.
这是我想在Knex中编写的SQL:
SELECT w.*, ua.name, uw.name FROM Words AS w
INNER JOIN Users AS ua ON w.author_id = ua.id
LEFT JOIN Users AS uw ON w.winner_id = uw.id
Run Code Online (Sandbox Code Playgroud)
我在Knex如何做到这一点有点迷茫.我的第一次尝试没有涉及别名,所以我得到了一个"不止一次使用"的错误.当我尝试使用.as()方法时,knex抱怨缺少.from()子句..as()方法是否仅用于别名子查询,我不应该期望它用于别名表吗?
我把内部联接放在我的查询中.我得到了结果,但不知道数据是如何输出的.任何人都告诉我内部联接如何匹配数据.我正在显示图像.有两张桌子(一张或两张桌子).

据我说第一排它应该是Mohit,但输出是不同的.请告诉我.
提前致谢.
我似乎在使用hibernate中的查询时遇到了一些困难.我正在两个表上执行内连接.
SELECT * FROM product p INNER JOIN warehouse w ON p.wid = w.id
Run Code Online (Sandbox Code Playgroud)
产品表:
id | name | wid | price | stock .....
Run Code Online (Sandbox Code Playgroud)
仓库表:
id | name | city | lat | long .....
Run Code Online (Sandbox Code Playgroud)
加入结果:
id | name | wid | price | stock | id | name | city | lat | long .....
Run Code Online (Sandbox Code Playgroud)
当我运行查询..
Session.createSQLQuery(this.query)
.addEntity("p", Product.class)
.addEntity("w", Warehouse.class).list();
Run Code Online (Sandbox Code Playgroud)
因此,对于每个结果,我得到一个包含a Product object和a 的对象Warehouse object.
这是预料之中的.问题是hibernate将产品的id和名称分配给仓库对象id和name属性.就创建Warehouse项目而言,好像连接结果中的前两列都过度了.Product对象始终包含正确的数据.
关于找到解决此问题的方法的任何建议,以便表示正确仓库数据的id和name列将非常受欢迎.
提前致谢.
下面是我的查询使用左连接按预期工作.我想要做的是进一步添加另一个表过滤此查询,但是这样做有困难.我将调用这个新表,table_3并希望添加到哪里table_3.rwykey = runways_updatable.rwykey.任何帮助将非常感谢.
SELECT *
FROM RUNWAYS_UPDATABLE
LEFT JOIN TURN_UPDATABLE
ON RUNWAYS_UPDATABLE.RWYKEY = TURN_UPDATABLE.RWYKEY
WHERE RUNWAYS_UPDATABLE.ICAO = 'ICAO'
AND (RUNWAYS_UPDATABLE.TORA > 4000 OR LDA > 0)
AND (TURN_UPDATABLE.AIRLINE_CODE IS NULL OR TURN_UPDATABLE.AIRLINE_CODE = ''
OR TURN_UPDATABLE.AIRLINE_CODE = '')
Run Code Online (Sandbox Code Playgroud)
' *************编辑为CLARIFY***************** 这是我想要使用的内连接的另一个语句,我想结合这两个语句.
SELECT *
FROM RUNWAYS_UPDATABLE A, RUNWAYS_TABLE B
WHERE A.RWYKEY = B.RWYKEY
Run Code Online (Sandbox Code Playgroud)
' ***到目前为止,我所掌握的建议,但是语法错误
SELECT …Run Code Online (Sandbox Code Playgroud) 我们在MySQL内连接方面遇到了一些奇怪的问题.基本上,我们在使用'='运算符时会出现奇怪的错误,但使用'like'会使其工作.不幸的是,这是通过ActiveRecord,并没有简单的方法只是在那里打'喜欢',而且我们想要了解这里实际发生了什么.
这是失败的查询:
mysql> SELECT COUNT(*) FROM `versions` INNER JOIN `site_versions`
ON `versions`.id = `site_versions`.version_id;
Run Code Online (Sandbox Code Playgroud)
这是错误:
ERROR 1296 (HY000): Got error 20008 'Query aborted due to out of query memory'
from NDBCLUSTER
Run Code Online (Sandbox Code Playgroud)
这是有效的查询:
mysql> SELECT COUNT(*) FROM `versions` INNER JOIN `site_versions`
ON `versions`.id like `site_versions`.version_id;
Run Code Online (Sandbox Code Playgroud)
以下是表格本身的一些细节:
mysql> desc site_versions;
+----------------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| version_id | int(11) …Run Code Online (Sandbox Code Playgroud) 如何在类似于此的查询上强制索引.我需要单独强制foo和bar上的索引.
SELECT foo.*, bar.*
FROM foo
INNER JOIN bar ON foo.rel_id = bar.rel_id
WHERE foo.status = 1
AND bar.status = 1
Run Code Online (Sandbox Code Playgroud) 与WHERE子句相反,在连接中进行过滤是否有任何明显的性能参数?
例如,
SELECT blah FROM TableA a
INNER JOIN TableB b
ON b.id = a.id
AND b.deleted = 0
WHERE a.field = 5
Run Code Online (Sandbox Code Playgroud)
相反
SELECT blah FROM TableA a
INNER JOIN TableB b
ON b.id = a.id
WHERE a.field = 5
AND b.deleted = 0
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢后者,因为我觉得过滤应该在过滤部分(WHERE)中完成,但是有任何性能或其他原因要做任何一种方法吗?
inner-join ×10
sql ×5
left-join ×3
mysql ×3
join ×2
sql-server ×2
activerecord ×1
hibernate ×1
java ×1
knex.js ×1
ms-access ×1
oracle ×1
php ×1
search ×1
sqlite ×1