Fill in NULL values with those from another another table MySQL 5.6

Table: Employees

    EmployeeID   |   Name   |   PIN
    -------------+----------+---------
    1            |   Bob    |  1234
    2            |   Jim    |  3214
    3            |  Claire  |  4321
    4            | Jessica  |  NULL
    5            |  James   |  NULL
   ...           |   ...    |  ...


Table continues and all the PINs are NULL.

There's a second table: PINS

    PinID   |   PIN
    --------+--------
    1       |   1010
    2       |   1983
    3       |   5281
    4       |   6292
    5       |   9998
   ...      |   ...


Table continues on.
These numbers need to be added in to the null values. There can be no duplicates and they need to be in the order that they're listed in. 

Goal: Employee

    EmployeeID   |   Name   |   PIN
    -------------+----------+---------
    1            |   Bob    |  1234
    2            |   Jim    |  3214
    3            |  Claire  |  4321
    4            | Jessica  |  1010
    5            |  James   |  5281
   ...           |   ...    |  ...


I've been attempting stuff similar to this:

UPDATE Employees
SET PIN =(SELECT PIN 
          FROM PINS  
          WHERE Employees.PIN &lt;&gt; PINS.PIN )
WHERE PIN IS NULL;


I'm at a loss, is there any way to bring the PINS over?

EDIT: I made some progress with:

UPDATE Employees 
SET PIN = (SELECT PINS.PIN
           FROM PINS
           WHERE PINS.PinID = Employees.EmployeeID)
WHERE EXISTS ( SELECT 1
              FROM PINS
              WHERE PINS.PinID = Employees.EmployeeID)

;


however it replaces the starting PINS as well

EDIT2: added the goal table
First you need to relate the first empty PIN in Employees with the first PIN in PINs, the second empty PIN with the second available PIN and so on. Then you will be able to use an update with a join and populate the rows thus related.

One way is to assign row numbers to both sets and use the row numbers as the joining criterion. As MySQL does not support the standard SQL ROW_NUMBER() analytical function, you have to do without it.

One alternative is to assign the row numbers with the help of a variable, like this:

SELECT
  s.EmployeeID,
  @r := @r + 1 AS RowNumber
FROM
  (SELECT @r := 0) AS x
  CROSS JOIN
  (
    SELECT
      EmployeeID
    FROM
      Employees
    WHERE
      PIN IS NULL
    ORDER BY
      EmployeeID ASC
  ) AS s
;


The above produces a row set containing employee IDs and corresponding row numbers. Store the resulting set as a temporary mapping table and do the same for the PINs table, unless its PinID column already is a row number column. Based on your comment to Thronk's answer that the PINs table is imported from Excel, I am going to assume that the values in PinID have indeed been generated in Excel as row numbers essentially.

So, after you save the mapping set like this:

CREATE TEMPORARY TABLE Mapping
AS
SELECT
  s.EmployeeID,
  @r := @r + 1 AS PinID
FROM
  (SELECT @r := 0) AS x
  CROSS JOIN
  (
    SELECT
      EmployeeID
    FROM
      Employees
    WHERE
      PIN IS NULL
    ORDER BY
      EmployeeID ASC
  ) AS s
;


you can use it in the UPDATE statement like this:

UPDATE
  Employees AS e
  INNER JOIN Mapping AS m ON e.EmployeeID = m.EmployeeID
  INNER JOIN PINs AS p ON m.PinID = p.PinID
SET
  e.PIN = p.PIN
;


You can play with this method at Rextester.