2017-02-06 1 views
0

Как я сказал в заголовке, или, может быть, мой вопрос немного запутан. Вот он ...INNER JOIN то же значение, но разница в другой таблице имеет дополнительное слово перед значением

Итак, я хочу объединить 2 таблицы, используя INNER JOIN (ofcourse) с некоторой разницей. Это мои таблицы Таблица 1, PK = STEAM_ID

SELECT * FROM nmrihstats ORDER BY points DESC LIMIT 4; 
+---------------------+----------------+--------+-------+--------+ 
| steam_id   | name   | points | kills | deaths | 
+---------------------+----------------+--------+-------+--------+ 
| STEAM_0:1:88467338 | Alan14   | 50974 | 5438 |  12 | 
| STEAM_0:0:95189481 | ? BlacKEaTeR ? | 35085 | 24047 | 316 | 
| STEAM_0:1:79891668 | Lowell   | 34410 | 44076 | 993 | 
| STEAM_0:1:170948255 | Rain   | 29780 | 30167 | 278 | 
+---------------------+----------------+--------+-------+--------+ 
4 rows in set (0.01 sec) 

Таблица 2, PK = AUTHID

SELECT * FROM store_players ORDER BY credits DESC LIMIT 4; 
+-----+-------------+---------------+---------+--------------+-------------------+ 
| id | authid  | name   | credits | date_of_join | date_of_last_join | 
+-----+-------------+---------------+---------+--------------+-------------------+ 
| 309 | 1:88467338 | Alan14  | 15543 | 1475580801 |  1482260232 | 
| 368 | 1:79891668 | Lowell  | 10855 | 1475603908 |  1482253619 | 
| 256 | 1:128211488 | Fuck[U]seLF | 10422 | 1475570061 |  1482316480 | 
| 428 | 1:74910707 | Mightybastard | 7137 | 1475672897 |  1482209608 | 
+-----+-------------+---------------+---------+--------------+-------------------+ 
4 rows in set (0.00 sec) 

Теперь, как я могу использовать INNER JOIN не делая, как удаление "STEAM_0:" или добавив его. Кроме того, с объяснением, пожалуйста,

ответ

0

Вы можете join WITN like оператор, например:

SELECT n.*, sp.* 
FROM nmrihstats n JOIN store_players sp ON n.steam_id LIKE CONCAT('%', sp.authid); 

Вот SQL Fiddle.

Другой подход заключается в использовании String функции MySQL извлечь из соответствующей части из steam_id, но я считаю, что это не то, что вы хотите:

SELECT SUBSTR(steam_id, LOCATE('STEAM_0:', steam_id) + CHAR_LENGTH('STEAM_0:')) 
FROM nmrihstats; 
+0

Спасибо за ваш ответ, очень полезно. Хотя это немного медленнее, если у меня так много строк в таблице, но поскольку это для индивидуальных целей, все же приемлемо. – Alan14

0

невозможно, вам нужно удалить «STEAM_0:», соответствующий WHERE, используя подстроку для удаления STEAM_0: из столбца равен столбец в другой таблице или новое поле в T1 без "STEAM_0:", что 2 колонки подходят для INNER JOIN

+0

Спасибо за ваше предложение. Поскольку таблица генерируется двумя разными плагинами CS: GO, я оставлю это так. Я немного разбираюсь в sourcemod, но проблема в том, что я не могу найти создателя этого плагина, поэтому я не могу редактировать, так как у меня нет исходного файла – Alan14

Смежные вопросы